我在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的原定日期?我不想将我的时区改为另一个,因为洛杉矶是我正确的时区,对于我需要记录时间戳的所有其他方法,这是准确的。
答案 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');