使用strtotime和mktime时参数为0时返回1999-11-30的时间戳问题

<?php
$time = date('Y-m-d',strtotime('00-00-00 00:00:00'));
echo $time;
//输出 1999-11-30
?>

这里没有任何bug,00-00-00的意思是2000-00-00,2000-00-00实际上是1999-12-00,而1999-12-00又会转换成1999-11-30。
所以这里没有任何bug,完全正常。

strtotime('00-00-00 00:00:00')与 mktime(0,0,0,0,0,0) 是完全等价的。

//int mktime(时, 分, 秒, 月, 日, 年)
echo mktime(0,0,0,0,0,0);
mktime() 函数用于从日期取得时间戳,成功返回时间戳,否则返回 FALSE 。

输出 943920000

php根据身份证号码计算年龄

<?php
function getAgeByID($id){
		//过了这年的生日才算多了1周岁
        if(empty($id)) return '';
        $date=strtotime(substr($id,6,8));//获得出生年月日的时间戳
        $today=strtotime('today');//获得今日的时间戳
        $diff=floor(($today-$date)/86400/365);//得到两个日期相差的大体年数
        //strtotime加上这个年数后得到那日的时间戳后与今日的时间戳相比
        $age=strtotime(substr($id,6,8).' +'.$diff.'years')>$today?($diff+1):$diff;

		return $age;
	}
?>