我的日期功能让我得到了意想不到的结果.例如
$date = '25-05-2049';
echo '<p>'.date('Y-m-d',strtotime($date)).'</p>'; // Showing 1970-01-01
Run Code Online (Sandbox Code Playgroud)
但这是正确的
$date = '25-05-2029';
echo '<p>'.date('Y-m-d',strtotime($date)).'</p>'; // 2029-05-25
Run Code Online (Sandbox Code Playgroud)
为什么第一个不正确?
在32位PHP strtotime()无法处理2038问题.来源.
如果以两位数格式指定年份编号,则00-69之间的值将映射到2000-2069和70-99到1970-1999.有关32位系统的可能差异,请参阅下面的注释(可能的日期可能会在2038-01-19 03:14:07结束).
因此要么使用64位版本的PHP,要么使用DateTime()日期.
$date = new DateTime('25-05-2049');
echo '<p>'.$date->format('Y-m-d').'</p>';
Run Code Online (Sandbox Code Playgroud)