堕落不振功业废,勤耕不辍日月新

php计算两个日期之间相差的年月日

PHP hailen 819℃

偶尔的一次,有人问了下我,怎么求某个会员到现在多少岁多少个月了,当时简单的回答到用两个时间戳除以每年的秒数,每个月的秒数,每天的秒数。很明显,这个回答是错的,后来就仔细想了下,确实不好实现,因为考虑到闰年,每个月天数这两个因素,就不是那么好计算的,然后想起了php的date_diff函数,先代码贴出来:

date_default_timezone_set('PRC');
$datetime1 = new DateTime('2012-12-08');
$datetime2 = new DateTime('2011-10-11');
$interval = $datetime1 ->diff($datetime2);
echo $interval ->format('%R%a days'),PHP_EOL;
echo $interval ->format('%Y-%m-%d'),PHP_EOL;                                      

输出结果为-424 days 01-1-28,也就是说相差了1年1个月28天,然后在看

date_default_timezone_set('PRC');
$datetime1 = new DateTime('2011-12-08');
$datetime2 = new DateTime('2010-10-11');
$interval = $datetime1 ->diff($datetime2);
echo $interval ->format('%R%a days'),PHP_EOL;
echo $interval ->format('%Y-%m-%d'),PHP_EOL;                                      

输出结果为-423 days 01-1-28,也就是说相差了1年1个月28天,对比两者不难发现,php这样计算是对的,php在计算的过程中考虑到了闰年的问题,但令人奇怪的是,2012年12月8号和2011年10月11号真的是相差1年1个月28天吗?应该不是的,而是1年1个月27天,更奇怪的是

date_default_timezone_set('PRC');
$datetime1 = new DateTime('2010-11-08');
$datetime2 = new DateTime('2010-09-11');
$interval = $datetime1 ->diff($datetime2);
echo $interval ->format('%R%a days'),PHP_EOL;
echo $interval ->format('%Y-%m-%d'),PHP_EOL;

输出结果为-58 days,00-1-27,也就是说相差了1个月27天

date_default_timezone_set('PRC');
$datetime1 = new DateTime('2010-12-08');
$datetime2 = new DateTime('2010-10-11');
$interval = $datetime1 ->diff($datetime2);
echo $interval ->format('%R%a days'),PHP_EOL;
echo $interval ->format('%Y-%m-%d'),PHP_EOL;

输出结果为-58 days,00-1-28,也就是说相差了1个月28天,看了这几个例子实在不明白php是怎么算的,这两个结果和我们理解的完全相反,不知道是我理解有误还是php的规则有特殊之处

转载请注明:我是IT » php计算两个日期之间相差的年月日

喜欢 (0)or分享 (0)