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()做一些解释。
答案 0 :(得分:7)
PHP使用32位整数。
32位整数限制为2,147,483,647
在第三个示例中,值溢出。把它想象成一辆汽车KM柜台。它仅限于某些值(在我们的例子中为2,147,483,647),一旦你将这个值传递回0。
这可能导致Year 2038 problem(记住2000年的错误?类似的概念)。
在“PHP开发人员会议纪要”中有一个proposal to add 64bit integer,我不知道它走了多远,他们的政策重新定义时间相关的功能。
希望这有帮助:)
答案 1 :(得分:1)
您所看到的是Y2K38 bug。 2240896077
对于32位整数而言太大而且会溢出。
答案 2 :(得分: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。
答案 3 :(得分: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。