无法理解php中time()和date()的本质

时间:2012-06-28 15:14:08

标签: php date time

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 个答案:

答案 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 bug2240896077对于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。

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

答案 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。

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