将年份添加到日期会重置为1970-01-01

Zur*_*ser 3 php date dateadd strtotime

$somedate = "1980-02-15";
$otherdate = strtotime('+1 year', strtotime($somedate));
echo date('Y-m-d', $otherdate);
Run Code Online (Sandbox Code Playgroud)

输出

1981-02-15
Run Code Online (Sandbox Code Playgroud)

$somedate = "1980-02-15";
$otherdate = strtotime('+2 year', strtotime($somedate));
echo date('Y-m-d', $otherdate); 
Run Code Online (Sandbox Code Playgroud)

输出

1982-02-15
Run Code Online (Sandbox Code Playgroud)

$somedate = "1980-02-15";
$otherdate = strtotime('+75 year', strtotime($somedate));
echo date('Y-m-d', $otherdate); 
Run Code Online (Sandbox Code Playgroud)

输出

1970-01-01
Run Code Online (Sandbox Code Playgroud)

怎么修?

Joh*_*nde 5

这是2038的bug,就像y2k一样,由于32位的限制,系统无法在那一年之后处理日期.请使用DateTime类来解决此问题.

适用于PHP 5.3+

$date = new DateTime('1980-02-15');
$date->add(new DateInterval('P75Y'));
echo $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

对于PHP 5.2

$date = new DateTime('1980-02-15');
$date->modify('+75 year');
echo $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)