【问题标题】:Proper way storing date and time for MySQL and PHP thats same from Daylight Savings存储 MySQL 和 PHP 的日期和时间的正确方法与夏令时相同
【发布时间】: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/…

标签: php mysql


【解决方案1】:

php中有更好的方法:

您可以使用 time() 函数并将时间插入为 bigint 时间戳值始终为 UTC(值以秒为单位)!

$tm = time();
echo date('Y-m-d H:i:s', $tm);

如果你需要选择时间

SELECT from data WHERE time < $tm;

最后一天(时间总是第二):

$tm = time() - 60 * 60 * 24;
SELECT from data WHERE time > $tm;

【讨论】:

  • 非常简单:)。
  • 没有时区,但无法分辨当时的当地时间。
【解决方案2】:

解决方案非常简单。将所有日期存储为 Unix 时间或 UTC 时区以及用户的时区名称。使用存储的时区,您可以毫无问题地向用户展示给定时刻的当地时间。

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 2014-06-29
    • 2012-04-07
    • 2015-07-09
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2012-12-21
    相关资源
    最近更新 更多