【问题标题】:PHP date() only from 1970 - 2038PHP date() 仅从 1970 到 2038
【发布时间】:2011-07-27 00:45:29
【问题描述】:

首先,这不是关于如何解决问题的问题,因为我的日期输出的是 1969。

这是一个关于为什么使用date()时时间不存在于1970年之前或2038年之后的问题。

我尝试搜索 SO 和 Google,但结果是人们在错误使用 date() 时出错,导致熟悉的输出 December 31, 1969 5:00 pm

有人知道为什么它不能在 1970 年之前进行吗?我们是否应该停止使用date(),因为它在 2038 年之后将无法使用?这有什么来历?使用此范围之外的日期有什么解决方法?

【问题讨论】:

标签: php date


【解决方案1】:

这是2038的问题

看看,I'm in year 1653

【讨论】:

  • 非常好,但尝试在小于 UTC 的任何时间使用 strtotime 不会输出负数。有没有办法解决这个问题?
  • @imoda:PHP 5.3.3-7+squeeze3 和 Suhosin-Patch (cli)(构建时间:2011 年 6 月 28 日 08:24:40)
  • @imoda:我在 amd64 Debian 上,这可能是你的问题。从文档“时间戳的有效范围通常是从 1901 年 12 月 13 日星期五 20:45:54 UTC 到 2038 年 1 月 19 日星期二 03:14:07 UTC。(这些日期对应于最小值和最大值32 位有符号整数)此外,并非所有平台都支持负时间戳,因此您的日期范围可能会被限制为不早于 Unix 纪元。”
【解决方案2】:

这在PHP manual page 上对date() 进行了解释:

时间戳的有效范围通常是从 1901 年 12 月 13 日星期五 20:45:54 GMT 到 2038 年 1 月 19 日星期二 03:14:07 GMT。 (这些日期对应于 32 位有符号整数的最小值和最大值)。

您得到 1969 年 12 月 31 日这一事实意味着您可能向 date() 提供了一个奇怪的 timestamp 参数,从而导致日期不是您所期望的。就像@Mitch Wheat 在他的评论中所说,这与 Unix 时间有关,因为它是 1970 年 1 月 1 日的相对时间。

【讨论】:

    【解决方案3】:

    比较数字 2^31 和两个日期之间的秒数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      相关资源
      最近更新 更多