【问题标题】:PHP mktime sometimes returning wrong dayPHP mktime 有时会返回错误的日期
【发布时间】:2014-01-09 05:22:27
【问题描述】:

我在使用 mktime 时遇到了一个简单的问题。我找到以下代码:

echo date("Y-M-d", mktime(11, 45, 0, 01, 05, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 06, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 07, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 08, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 09, 2014)); echo ", ";

正在产生以下输出:

2014-Jan-05, 2014-Jan-06, 2014-Jan-07, 2013-Dec-31, 2013-Dec-31

日期函数只是为了使它更易读; mktime 本身返回的时间戳是错误的。 唯一变化的是一个月中的哪一天,所以我不知道为什么 7 和 8 之间的日子会不连续,或者为什么 8 和 9 会在同一天返回.

我已经检查过小时、分钟和秒不会改变错误日期的结果,尽管它们确实会改变确切的时间戳。也就是说,上面的最后两行返回完全相同的时间戳(1388508300),但如果我更改小时,时间戳的相对变化符合预期。

如果上下文很重要,这将在 WordPress 安装中以 PHP 5.3 运行。

【问题讨论】:

    标签: php wordpress mktime


    【解决方案1】:

    0.. 开头的整数文字采用八进制 表示法。八进制或以上的08 不存在,您得到的值完全错误。第五天的5,而不是05等等。

    【讨论】:

      【解决方案2】:

      在你的日子(和几个月)之前去掉前导零

      echo date("Y-M-d", mktime(11, 45, 0, 1, 5, 2014)); echo ", ";
      echo date("Y-M-d", mktime(11, 45, 0, 1, 6, 2014)); echo ", ";
      echo date("Y-M-d", mktime(11, 45, 0, 1, 7, 2014)); echo ", ";
      echo date("Y-M-d", mktime(11, 45, 0, 1, 8, 2014)); echo ", ";
      echo date("Y-M-d", mktime(11, 45, 0, 1, 9, 2014)); echo ", ";
      

      See it in action

      【讨论】:

      • 还有几个月。当你到 08 和 09 时,你也会遇到大问题。
      • 谢谢;当然,当我点击“提问”时,我也想到了这种可能性。我不知道 PHP 中的前导零(常见于格式化日期!)被解释为八进制数。为了完全正确,我也必须从“01”(一月)中删除前导零,否则八月我会遇到另一个问题。
      • @GJP 08 不是日期,它只是一个数字... :)
      猜你喜欢
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多