MySQL UNIX_TIMESTAMP表现得很奇怪

时间:2014-07-11 15:38:37

标签: php mysql date

在我的数据库中,我有一个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

我不明白这是做什么的。

2 个答案:

答案 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']));

希望这有助于......工作!