【问题标题】:PHP date() fails for high timestamps on 32bitPHP date() 因 32 位的高时间戳而失败
【发布时间】:2014-10-24 09:48:37
【问题描述】:

我偶然发现了这个问题:

<?php

echo date('r', 4567743118);

期望和正确的结果(在本地主机上):

2114 年 9 月 30 日星期日 10:31:58 +0100

不正确的结果(远程):

1978 年 8 月 24 日星期四 04:03:42 +0100

在 32 位平台上运行脚本时会得到错误的结果。我认为这是著名的 Y2038 问题,但我应该如何解决?

如果我回显时间戳(当存储在变量中时),它显示正常,但 date() 会破坏它(我假设转换为 int32)。

<?php
$a = 4567743118;
echo $a;

4567743118

[如果相关,它是来自 debian repos 的 PHP 5.4.4]

【问题讨论】:

  • 关于 y2038 的一切都是“相似的”,但这并不重要。我需要格式化这些时间戳。
  • date('r', '4567743118'); 的结果是什么?
  • @ManeatingKoala 一样,'Thu, 24 Aug 1978 04:03:42 +0100'

标签: php year2038


【解决方案1】:

试试这个:

<?php

$dt = new DateTime('@4567743118');
$date = $dt->format('Y-m-d');

echo $date;

run code on x86 machine

【讨论】:

  • 太好了,这行得通。我为它做了一个包装函数fdate()
【解决方案2】:

32 位系统上的时间戳只持续到 2.147.483.647。所以如果你有一个更大的值,你就会超过整数最大长度。这里的最大值是 2038 年。

如果您需要更大的日期,则必须使用 datetime。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2013-11-22
    • 1970-01-01
    • 2015-11-12
    相关资源
    最近更新 更多