PHP strtotime返回意外值

时间:2013-11-30 14:14:19

标签: php wordpress

我有一些用于日期格式化的PHP代码,如下所示

$date =   date('Y-m-d', strtotime('2076-11-26'));                               
echo $date;

但是对于某些日期返回的值是1970-01-01,我真的很担心这个问题,上面是我1970年作为年份的一个示例日期,我将时区设置为date_default_timezone_set('UTC');,但仍然无济于事,问题出在我的实时服务器上,虽然它在生产服务器上运行良好。

1 个答案:

答案 0 :(得分:1)

这是因为2076年不在32位Unix时代。它以2038结束,如果您使用的是32位版本,那么您将无法处理超出该范围的日期。

来自strtotime()的文档:

  

时间戳的有效范围通常是从星期五,12月13日 1901 20:45:54 UTC到星期二,1月19日 2038 03:14:07 UTC。 (这些是与32位有符号整数的最小值和最大值相对应的日期。)

您可以使用DateTime类代替,这是为了解决此限制而引入的。它使用不同的机制来存储时间组件,因此您不会遇到此问题。它可以处理非常广泛的日期:

完成DateTime类时,同样如下:

$date = new DateTime('2076-11-26');
echo $date->format('Y-m-d');

输出:

2076-11-26