【发布时间】:2017-11-08 19:17:46
【问题描述】:
自从一个多星期前发生夏令时以来,我的数据库已经搞砸了,一切都提前了 1 小时,所以我正在尝试找出解决这个问题的最佳方法,并防止这个问题继续下去。
现在是美国东部标准时间 2017 年 11 月 8 日下午 2:16,当我使用 datetime=NOW() 提交内容时,输出显示为 2017 年 11 月 8 日下午 3:16 EST
在夏令时到来之前,它当然工作得很好,但是现在它关闭了一个小时。
我尝试过使用
date_default_timezone_set('America/Chicago');
然后还尝试了date_default_timezone_set('UTC');,但最终都使用以下命令显示完全相同的日期/时间:
echo date( 'm/d/y g:i A', strtotime($row['ticket_assigned_date']));
我看到了其他方法,例如使用 CONVERT_TZ('2010-01-01 12:00','+00:00','-07:00'),但是我真的想避免这种情况,因为使用大量的 select 语句似乎很糟糕,而且我必须这样做,这样我的网站才能完全对美国友好,所以他们设置了一个最好在他们的设置中设置时区,如果可能的话,在 PHP 中设置将是一个更好的选择。
此外,我想确保如果节省的时间确实是美国东部标准时间下午 2:16,然后夏令时命中,那么无论如何,存储的值当然仍会在未来美国东部标准时间下午 2:16 返回。
【问题讨论】:
-
我推荐
date_default_timezone_set。请记住,您必须在 将时间插入数据库之前调用它。另外不要忘记,当输出 从 数据库时,您需要再次调用它,这可能是您的绊脚石!您也可以更改php.ini中的date.timezone变量作为替代方案。 -
我以为
date_default_timezone_set是一个PHP独有的函数,在做MySQL插入时不影响INSERT datetime=NOW()的使用? -
正确,但您可以插入类似 PHP 的
date("Y-m-d H:i:s")之类的内容,这会给您带来相同的效果,并与date_default_timezone_set一起使用 :) -
您可以将时间戳转换为时区日期stackoverflow.com/questions/4186868/…