在我的数据库中,我有记录:'2013-01-24 16:40:08'
在 PHP 上使用函数strtotime ,我得到了时间戳1359045608。
执行查询:
SELECT UNIX_TIMESTAMP(my_timestamp_column) FROM my_table WHERE my_id_column = my_id
我得到时间戳1359056408而不是时间戳1359045608。
转换1359056408,我得到'2013-01-24 19:40:08',为什么!?
我解决了我的问题:
SELECT UNIX_TIMESTAMP(my_timestamp_column) + TIMESTAMPDIFF(second, UTC_TIMESTAMP(), NOW())
FROM my_table
WHERE my_id_column = my_id
我敢打赌,您正在将时间戳转换回 PHP 中的日期。
查看时间戳的差异:1359056408- 1359045608= 10800。
现在除以60秒/分钟和60分钟/小时:
10800 / 60 = 180
180 / 60 = 3
这意味着您所在的时区与 UTC 时间相差 3 小时。您应该使用可以在 UTC 中生成时间戳的函数,或者(如果是这种情况)您应该使用“感知”或不受时间局部性问题影响的日期时间存储格式。
如果您在数据库上使用 GMT,您可以通过在 php 中设置来设置 php 使用相同的时区,
date.timezone请参见date.timezone这种方式strtotime应该使用指定的时区。
我怀疑它们设置为不同的时区。
比较你的 MySQL 时间和你的 PHP 系统时间:
SELECT NOW();
对比
<?php
$date = date('Y-m-d H:i:s');
echo $date;
他们可能会休息 2 小时。