将PHP日期格式转换为大整数时出现问题

3

我希望将两个日期以big int类型存储到数据库中。我有一个被序列化的数组,将数组值发送到第二个表单,该数组包含以下内容:

[checkin] => 01-07-2015
[checkout] => 03-07-2015

使用此方法进行转换后:
$arr['checkin'] = strtotime($arr['checkin']);
$arr['checkout'] = strtotime($arr['checkout']);

我得到的值分别是1435689000 1435861800,比实际日期值少一天。
另外,只是想在我的服务器上通知,如果我的代码是:
<?php echo date('d-m-y', '1435689000');?>

如果我使用以下格式的gmdate函数,则输出结果为01-07-15
echo gmdate('d-m-y', '1435689000');

输出结果将是30-06-15

我无法弄清楚问题所在,你能帮忙吗?谢谢。


可能是您的数据库时区和PHP时区不同... - Amadan
@Amadan 有什么办法可以检查两个时区是不同的还是相同的吗? - Shridhar
@Amadan 我觉得我无法获得正确的日期转换值。稍后我可以考虑数据库和PHP的时区。 - Shridhar
@shridhar 在你的phpmyadmin中运行SELECT NOW()以了解你的服务器时间,并将其与你在php中获取的日期时间进行比较。 - Sulthan Allaudeen
为什么不将列属性从“bigint”更改为“date”,然后执行并检查呢? - Alive to die - Anant
显示剩余7条评论
2个回答

2
你需要学习这两个函数之间的区别:
1) 日期
string date ( string $format [, int $timestamp = time() ] )

根据给定的格式字符串,使用给定的整数时间戳或当前时间(如果未给出时间戳)返回一个格式化的字符串。换句话说,时间戳是可选的,默认值为time()函数的值。
2) gmdate
string gmdate ( string $format [, int $timestamp = time() ] )

与date()函数相同,唯一的区别是返回的时间为格林威治标准时间(GMT)。如果你已经看到另一个函数,它已经定义了两者是相同的,但gmdate以GMT格式返回它。如果您同时使用这两个函数和time进行回显,您就会理解它们之间的区别。
echo date('Y-m-d H:i:sP',1435689000);//2015-07-01 00:00:00+05:30

echo gmdate('Y-m-d H:i:sP',1435689000);//2015-06-30 18:30:00+00:00

这是因为按照格林威治标准时间,你当前的时间比GMT提前+0530。因此,两者的输出都是正确的,但区别在于时区

0

在使用strtotime函数之前,我们必须设置日期格式。因为用户提供的所有格式都无法被php接受。我们可以像这样使用:

$date = \DateTime::createFromFormat("d-m-Y" , '03-07-2015');
echo gmdate('d-m-y', strtotime($date->format('Y-m-d H:i:s')));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接