由于时区设置而更改日期

时间:2013-05-26 20:19:47

标签: php mysql datetime

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

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

示例:我在2013-05-08创建了一篇新文章和密钥。它将作为日期类型存储在显示2013-05-18的mysql中。但是当我稍后查看它时会显示2013-05-07。

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

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

2 个答案:

答案 0 :(得分:1)

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

当您尝试在UNIX TIMESTAMP中获取该日期时,会出现问题。 UNIX TIMESTAMP是自格林威治标准时间1970年1月1日以来的秒数。这意味着mysql使用它的时区设置将您的日期转换为GMT中的时间戳。

PHP日期功能还取决于php时区设置,并将时间戳转换为当前时区的日期。

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

答案 1 :(得分: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');