我需要在未来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函数是错误吗?
答案 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