PHP日期函数错误

时间:2011-06-20 06:28:45

标签: php

我需要在未来30年以上,这就是我使用下面代码的原因。

$currentDate = date("Y-m-d"); 
$dateOneYearAdded = strtotime(date("Y-m-d", strtotime($currentDate)) . " +30 year");
$endYr = date('Y', $dateOneYearAdded);

但是,当我测试这段代码时,它只工作了26年。我今年只能增加26年。如果我尝试添加超过26,那么它将恢复到1970年。

下面的代码工作正常:

$currentDate = date("Y-m-d"); 
$dateOneYearAdded = strtotime(date("Y-m-d", strtotime($currentDate)) . " +26 year");
$endYr = date('Y', $dateOneYearAdded);

我的代码有问题或PHP函数是错误吗?

5 个答案:

答案 0 :(得分:5)

恭喜,您遇到了Y2K38 problem。您将需要切换到64位系统,或使用DateTime类,它可以表示(几乎)任意日期。

答案 1 :(得分:3)

有关信息,请参阅this article

UNIX时间戳计算自1970年以来的秒数,作为32位整数,它的最大范围为2038.

您应该使用DateTime对象。

当然,如果您要在数据库中存储日期,请务必使用DATE或DATETIME字段。

答案 2 :(得分:1)

这是您要求的时间戳大于PHP可以在您的系统上保存的最大整数值。

答案 3 :(得分:1)

这是因为

  

时间戳的有效范围是   通常来自1901年12月13日星期五   格林威治标准时间20:45:54到2038年1月19日星期二   格林威治标准时间03:14:07 (这些是日期   对应于最小值和   32位有符号的最大值   整数)。但是,在PHP 5.1.0之前   此范围仅限于01-01-1970   某些系统(例如19-01-2038)   窗口)。

您可以使用DateTime课程

答案 4 :(得分:0)

根据PHP - date() function changelog

  

时间戳的有效范围是   通常来自1901年12月13日星期五   格林威治标准时间20:45:54到2038年1月19日星期二   格林威治标准时间03:14:07 (这些是日期   对应于最小值和   32位有符号的最大值   整数)。但是,在PHP 5.1.0之前   此范围仅限于01-01-1970   某些系统(例如19-01-2038)   窗口)。

因此,请务必查看DateTime Class