1

查看数据库时,我存储在 mysql 中的日期看起来不错,但是当我查看日期时,它总是落后一天。

mysql 数据类型是“日期”。我正在使用 UNIX_TIMESTAMP 从 mysql 获取日期列。我正在使用 php 的 date() 函数显示日期。我正在使用 bluehost 并将 php.ini 配置为使用洛杉矶时区。

示例:我在 2013 年 5 月 8 日创建了一篇新文章和密钥。它以日期类型存储在 mysql 中,显示 2013-05-18。但是当我稍后去查看它时,它显示为 2013-05-07。

时间戳为 1367992800,即格林威治标准时间 2013 年 5 月 8 日星期三 06:00:00 GMT,但在我的时区,2013 年 5 月 7 日星期二晚上 11:00:00。

如何显示原定日期 2013-05-18?我不想将我的时区更改为另一个,因为洛杉矶是我的正确时区,并且对于我需要记录时间戳的所有其他方法,它是准确的。

4

2 回答 2

1

如果您希望您的日期独立于时区,则应将其存储在不转换值的列中。所以date你选择的列类型是非常合适的。

当您尝试在 UNIX TIMESTAMP 中获取该日期时,问题就出现了。UNIX TIMESTAMP 是自 GMT 01.01.1970 以来的秒数。这意味着 mysql 使用它的时区设置将您的日期转换为 GMT 中的时间戳。

PHP 日期函数还依赖于 php 时区设置,并将时间戳转换为当前时区的日期。

要从 MySQL 获取日期而不将其转换为当前时区,请不要使用 UNIX_TIEMSTAMP 函数获取它。按原样或使用 DATE_FORMAT 函数获取它。

于 2013-05-26T21:17:06.783 回答
0

您应该使用 DateTime 对象。

$timezone = new DateTimeZone('Europe/London');

$date = new DateTime();
$date->setTimestamp($timestamp);
$date->setTimezone($timezone);

echo $date->format('Y-m-d H:i:s');
于 2013-05-26T20:40:42.973 回答