PHP date()在32位上由于时间戳太高而失败


PHP date() fails for high timestamps on 32bit

我偶然发现了这个问题:

<?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

试试这个:

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

在x86机器上运行代码

32位系统上的时间戳只会持续到l2.147.483.647。因此,如果您的值更大,则会超过整数最大长度。这里的最高年份是2038年。

如果你需要更大的日期,你必须使用日期时间。