下面的代码如果年份是2038,则返回1970;如果将年份更改为2037,则返回正确的年份(2037)。为什么?
$date = '28/05/2038';
$date = strtr($date, '/', '-');
$year = date('Y', strtotime($date));
echo $year;
我做了一些研究,并了解到,如果不支持传递的值,则strtotime转换将返回0。但是我不明白,如果我将日期从'28 / 05/2038'更改为'28 / 05/2037',它将变得不受支持。
答案 0 :(得分:0)
即使在PHP_INT_SIZE = 8的情况下,对于低于5.2.16的PHP版本,似乎很容易重复出现此问题。对于该版本及更高版本,代码可以正确执行。将PHP升级到5.2.16应该可以解决。仅针对PHP_INT_SIZE = 8(64位)进行了测试
Here you can check for yourself.
如果您碰巧使用的是PHP 5.2.0或更高版本(但低于5.2.16),则可以按照问题注释中的其他建议去上DateTime类。
注意:可能无法在已填充的服务器上升级服务,无法在工作中甚至在大学课程中都无法升级。但是,如果有可能,那么您应该在升级之前测试PHP的正确版本。如果可行,则应调查PHP的bugtracker,为什么要修复它以及在何时添加功能。然后提出更改建议。