4
date("Y",1340896077)//1340896077 are the seconds till 2012 from 1970

给出 2012 这是正常的

And date("Y",1940896077)

给出 2031 这也是正常的

date("Y",2240896077)

正在给出 1904,这绝对不正常。它应该给出 2041。

现在我想对 php 中的 time() 和 date() 进行一些解释。

4

4 回答 4

7

PHP 使用 32 位整数。

32 位整数限制为2,147,483,647

在您的第三个示例中,值溢出。把它想象成一个汽车公里计数器。它限制在某个值(在我们的例子中为 2,147,483,647),一旦你将这个值传递回 0。

这可能会导致2038 年问题(还记得 2000 年错误吗?类似的概念)。

在“PHP 开发者会议纪要”中,有人提议添加 64 位整数,我不确定它走了多远,以及他们的政策重新分级时间相关功能是什么。

希望这有帮助:)

于 2012-06-28T15:15:42.813 回答
1

您看到的是Y2K38 错误2240896077对于 32 位整数来说太大并且溢出。

于 2012-06-28T15:17:20.810 回答
1

从手册:

时间戳的有效范围通常是从 1901 年 12 月 13 日星期五 20:45:54 GMT 到 2038 年 1 月 19 日星期二 03:14:07 GMT。(这些日期对应于 32 位有符号整数的最小值和最大值)。但是,在 PHP 5.1.0 之前,此范围在某些系统(例如 Windows)上被限制为 01-01-1970 到 19-01-2038。

http://php.net/manual/en/function.date.php

于 2012-06-28T15:17:59.733 回答
1

时间戳的有效范围通常是从 1901 年 12 月 13 日星期五 20:45:54 GMT 到 2038 年 1 月 19 日星期二 03:14:07 GMT。(这些日期对应于 32 位有符号整数的最小值和最大值)。但是,在 PHP 5.1.0 之前,此范围在某些系统(例如 Windows)上被限制为 01-01-1970 到 19-01-2038。

来自: http: //php.net/manual/en/function.date.php

于 2012-06-28T15:18:17.747 回答