解决方案
-
方案一 更换系统和PHP均为64位。这个代价比较大,但是可以永久解决问题。
-
方案二 PHP5.2版本之后提供了一个函数DateTime可以临时解决一下问题。
// 1、日期字符串转换为时间戳
$obj = new DateTime("2050-12-31 23:59:59");
echo $obj->format("U"); // 2556115199
// 2、时间戳转换为日期字符串
$obj = new DateTime("@2556115199"); // 这里时间戳前要写一个@符号
$timezone = timezone_open('Asia/HONG_KONG'); // 设置时区
$obj->setTimezone($timezone);
echo $obj->format("Y-m-d H:i:s"); // 2050-12-31 23:59:59
// 而且DateTime还可以有其他玩法
$obj = new DateTime("2050-12-31 23:59:59");
echo $obj->format("Y/m/d H:i:s"); // 换种方式输入时间字符串2050/12/31 23:59:59
通过DateTime类来操作日期不会受到Y2K38漏洞的影响,可以最远支持到9999 年12月31日