3

我偶然发现了这个问题:

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

4

2 回答 2

2

尝试这个:

<?php

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

echo $date;

run code on x86 machine

于 2014-10-24T10:15:57.640 回答
1

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

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

于 2014-10-24T10:11:43.513 回答