【问题标题】:New way of defining timestamp in PHP 5.3?在 PHP 5.3 中定义时间戳的新方法?
【发布时间】:2011-11-08 12:51:43
【问题描述】:

PHP 5.3 中是否有定义时间戳的新方法?

这个strtotime('0000-00-00');

将在 PHP 5.3 之前的版本中返回 0 date(01/01/1970),在 PHP 5.3 中返回 -62169984000。还有像 30/11/-0001 这样的日期!!

但我在文档中找不到任何解释。有什么想法发生了变化还是我遗漏了什么?

【问题讨论】:

  • 为什么需要这样做? “0000-00-00”是什么日期?
  • 我对无效日期返回意外值并不感到惊讶。你到底想做什么?
  • @Juhana:嗯,strtotime('2011-09-00') 通过“四舍五入”工作。也许他期待着今年的最后一天-1。当然,严格来说,没有年份0。
  • 好吧,我在代码中确实收到了 0000-00-00。无论如何,我会验证正确的日期。谢谢大家。

标签: php timestamp strtotime


【解决方案1】:

解释在这里:https://bugs.php.net/bug.php?id=46597

引用:

当然,但是 strtotime() 长期以来一直以与 mktime() 相同的方式处理无效的月份和日期值,将它们有效地“四舍五入”为有效值:当月的第 0 天成为上个月的最后一天,第 0 个月是上一年的最后一个月,依此类推。鉴于这种解释,0000-00-00 显然会成为 -1 年 11 月的最后一天(即公元前 2 年)。

现在不可能改变行为:checkdate() 无论如何都是嗅出无效日期的更好方法,对于依赖 strtotime() 中这种行为的人来说,这可能是一个令人讨厌的向后兼容性中断.

【讨论】:

    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    相关资源
    最近更新 更多