Php MySQL UNIX_时间戳行为怪异

Php MySQL UNIX_时间戳行为怪异,php,mysql,date,Php,Mysql,Date,在我的数据库中有一个datetime字段,其值如下2014-07-21 00:00:00 当我提取数据时,我有一条线: SELECT UNIX_TIMESTAMP(date) AS `date` ... 然后,当我使用PHP date对其进行格式化以供人类阅读时,会发生以下情况: echo date('d/m/Y H:i:s', $row['date']); // outputs 20/07/2014 23:00:00 我不明白这是怎么回事。这是一个时区问题2014-07-21 00:00:

在我的数据库中有一个
datetime
字段,其值如下
2014-07-21 00:00:00

当我提取数据时,我有一条线:

SELECT UNIX_TIMESTAMP(date) AS `date` ...
然后,当我使用PHP date对其进行格式化以供人类阅读时,会发生以下情况:

echo date('d/m/Y H:i:s', $row['date']);
// outputs 20/07/2014 23:00:00

我不明白这是怎么回事。

这是一个时区问题
2014-07-21 00:00:00
将转换为非常不同的UNIX时间戳,具体取决于数据库假定此时所在的时区。相反,PHP将根据使用
date\u timezone\u default\u set
设置的时区,将UNIX时间戳转换为人类可读的版本。如果希望输出相同的值,则必须确保MySQL的内部时区设置和PHP的内部时区设置相同。

这是一个时区问题
2014-07-21 00:00:00
将转换为非常不同的UNIX时间戳,具体取决于数据库假定此时所在的时区。相反,PHP将根据使用
date\u timezone\u default\u set
设置的时区,将UNIX时间戳转换为人类可读的版本。如果希望输出相同的值,则必须确保MySQL的内部时区设置和PHP的内部时区设置相同。

我在数据库中复制了相同的值,得到了完全相同的值。我不能说你和我是否在同一时区,但有一件事是肯定的——根据文件

如果使用日期参数调用UNIX_TIMESTAMP(),它将以秒的形式返回自UTC“1970-01-01 00:00:00”以来的参数值

这就解释了这种差异。 为了解决这个问题,您可以正常选择日期,并在php中使用strotime将其转换为时间戳。如

SELECT date AS `date` ...
echo date('d/m/Y H:i:s', strtotime($row['date']));

希望这有帮助…干杯

我在数据库中复制了相同的值,得到了完全相同的值。我不能说你和我是否在同一时区,但有一件事是肯定的——根据文件

如果使用日期参数调用UNIX_TIMESTAMP(),它将以秒的形式返回自UTC“1970-01-01 00:00:00”以来的参数值

这就解释了这种差异。 为了解决这个问题,您可以正常选择日期,并在php中使用strotime将其转换为时间戳。如

SELECT date AS `date` ...
echo date('d/m/Y H:i:s', strtotime($row['date']));

希望这有帮助…干杯

可能是时区和/或夏令时。检查您的PHP和MySQL时区设置和配置是否相同。为什么不简单地使用
SELECT DATE\u格式(DATE,'%d/%m/%Y%H:%i:%s')
?@VMai:因为在加载数据的对象中,我希望它作为时间戳。这样,我就可以在不同的场景下用PHP控制表示格式。也许你可以在你的问题中编辑这个限制。可能是时区和/或夏令时。检查您的PHP和MySQL时区设置和配置是否相同。为什么不简单地使用
SELECT DATE\u格式(DATE,'%d/%m/%Y%H:%i:%s')
?@VMai:因为在加载数据的对象中,我希望它作为时间戳。这样,我就可以在不同的场景下用PHP控制表示格式。也许你可以把这个限制修改成你的问题。干杯,听起来不错,我会接受时间限制。干杯,听起来不错,我会接受时间限制。