在我的数据库中,我有一个datetime
字段,其值为2014-07-21 00:00:00
。
当我提取数据时,我有一行:
SELECT UNIX_TIMESTAMP(date) AS `date` ...
当我使用PHP日期格式化以供人阅读时,会发生以下情况:
echo date('d/m/Y H:i:s', $row['date']);
// outputs 20/07/2014 23:00:00
我不明白这是做什么的。
答案 0 :(得分:4)
这是一个时区问题。 2014-07-21 00:00:00
将转换为非常不同的UNIX时间戳,具体取决于数据库假定此时间所在的时区。相反,PHP将根据date_timezone_default_set
设置的时区将UNIX时间戳转换为人类可读的版本。 。如果您希望输出相同的值,则必须确保MySQL的内部时区设置和PHP的内部时区设置相同。
答案 1 :(得分:0)
我在我的数据库中复制了相同的内容并获得了完全相同的值。我不能说你和我在同一时区,但有一件事是肯定的 - 根据文件Here
如果使用日期参数调用UNIX_TIMESTAMP(),则会将参数的值返回为自“1970-01-01 00:00:00”UTC后的秒数
这解释了这种差异。 要解决此问题,您可以正常选择日期并在php中使用strtotime将其转换为时间戳。如在
SELECT date AS `date` ...
echo date('d/m/Y H:i:s', strtotime($row['date']));
希望这有助于......工作!