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() 进行一些解释。
PHP 使用 32 位整数。
32 位整数限制为2,147,483,647
在您的第三个示例中,值溢出。把它想象成一个汽车公里计数器。它限制在某个值(在我们的例子中为 2,147,483,647),一旦你将这个值传递回 0。
这可能会导致2038 年问题(还记得 2000 年错误吗?类似的概念)。
在“PHP 开发者会议纪要”中,有人提议添加 64 位整数,我不确定它走了多远,以及他们的政策重新分级时间相关功能是什么。
希望这有帮助:)
您看到的是Y2K38 错误。2240896077
对于 32 位整数来说太大并且溢出。
从手册:
时间戳的有效范围通常是从 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。
时间戳的有效范围通常是从 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