【问题标题】:PHP strtotime() function wrong by 1 hour?PHP strtotime() 函数错了 1 小时?
【发布时间】:2010-07-21 21:21:51
【问题描述】:

在将日期和时间插入我的 MySQL 数据库之前,我正在使用 PHP 将日期和时间转换为时间戳。

我的问题是,当我使用 PHP 的 strtotime 函数时,输出时间戳比我的实际时间晚 -1 小时。

例如,考虑到今天的日期:2010 年 7 月 21 日。当我使用 php 代码时:

<?php
$my_timestamp = strtotime("07/21/2010");
echo $my_timestamp;
?>

发回的时间戳是相当于 GMT 的 MINUS 1 小时。即我回来:2010 年 7 月 20 日 23:00:00 GMT 而不是 2010 年 7 月 21 日 00:00:00 GMT。

我住在英国,所以我的时区是 GMT。我已经使用 date_default_timezone_set('Europe/London') 在脚本中声明了我的时区,并且我还确保将 php.ini 文件设置为 'Europe/London'。

这可能与夏令时有关吗?如何在不将所有日期增加 1 小时的情况下解决问题?

【问题讨论】:

  • 如果只需要日期加1小时,时间戳加3600(3600秒=1小时)
  • 您的时区不是格林威治标准时间,英国现在是夏令时间,格林威治标准时间 +1
  • @nos 为什么不添加这个作为答案,我认为它是正确的。
  • 澄清一下,作为时区的 GMT 仍然存在,即使我们不在英国。我们现在的时区是 BST (GMT+1),所以正如已经指出的那样,您错误地假设您在 GMT 上是您的问题的原因。不比加州那个告诉我他全年总是在PDT上的人差:(

标签: php mysql strtotime unix-timestamp


【解决方案1】:

夏令时期间,欧洲/伦敦时间不是格林威治标准时间。您需要将其设置为 UTC。

date_default_timezone_set('UTC');

date_default_timezone_set('GMT'); 可能有效,但正如 Kenneth 在下面的评论中指出的那样,它已被弃用。

【讨论】:

  • 注意:GMT 已在较新版本的 PHP 中被贬值,虽然仍暂时支持它,但强烈建议使用 UTC。
  • @Kenneth 添加了注释。谢谢!
【解决方案2】:

伦敦时区在夏季以英国夏令时表示。话虽如此,以 UTC 存储时间并以 UTC 或他们的本地时间向最终用户显示时间是一种很好的做法。

确保您的系统时间为 UTC 也是明智之举。

【讨论】:

    【解决方案3】:

    在 PHP 5.3 之前,strtotime 在计算时间时会出现问题,如果您添加或减去月份和日期等。这个问题已修复,因此您现在可以具体说明您希望如何计算它,如果您低于 PHP 5.3,我建议您这样做在 mysql 中计算日期或升级您的 PHP 版本。

    【讨论】:

    • 确定不是您理解的“错误”的 PHP 的日期和时间函数?
    • @Android Noob 我不确定我是否希望它起作用。 1 个月不是固定的计量单位。它可能是 28、29、30 或 31 天,具体取决于月份,这与其他有效的 strtotime() 解释不同(+1 天,+1 周),它们始终是固定的时间量,无论何时发生. (也就是说,我不是你的反对者之一)。
    • 果然如我所料。 +1 month 只是将月份部分增加 1。因为 2009-02-31 不存在,它会溢出到 03。这与 GNU 规范一致。您可以使用first day of next monthlast day of next month
    • @yc 那是因为 2008 年是闰年。所以 2008-02-31 会溢出到 2008-03-02。
    • @Android 怎么“不一致”? +1 个月将 1 个月添加到日期的月份部分。如果该日期不存在,则会溢出。自创建函数以来,它一直在这样做。仅仅因为它不符合您应该做什么的概念,并不意味着它“被窃听”。该函数的行为始终如一且正确。事实上,Jan-31 + 1 month = Mar 2nd 完全有道理。你期望它做什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多