Php 日期时间差异在月份中存在不一致
在月份差异方面存在问题,下面的函数返回月份的年龄Php 日期时间差异在月份中存在不一致,php,datetime,Php,Datetime,在月份差异方面存在问题,下面的函数返回月份的年龄 function ageMonths($dob) { //new date time $dob must be Y-m-d format $dobObject = DateTime::createFromFormat('Y-m-d',$dob); //current date $nowObject = new DateTime(); //difference $diff = $nowObject
function ageMonths($dob)
{
//new date time $dob must be Y-m-d format
$dobObject = DateTime::createFromFormat('Y-m-d',$dob);
//current date
$nowObject = new DateTime();
//difference
$diff = $nowObject->diff($dobObject);
return $diff->y.'.'.$diff->m;
}
问题是我有几个月的不一致,有些是准确的,有些不是,请看下面的样本
5.5 - 2008-10-03 correct
8.2 - 2005-12-27 must be 8.3
4.5 - 2009-09-24 must be 4.6
6.7 - 2007-07-14 must be 6.8
6.7 - 2007-07-17 must be 6.8
6.5 - 2007-09-28 must be 6.6
7.1 - 2007-01-17 must be 7.2
7.1 - 2007-02-10 correct
6.3 - 2007-11-16 must be 6.4
7.1 - 2007-02-10 correct
6.3 - 2007-11-16 must be 6.4
6.10 - 2007-05-08 correct
我找不到哪里不对,有什么想法吗?没有取整,只是你对月差的概念与DateInterval使用的不同 减去两个DateTime值后,结果DateInterval将嵌入一个月值,该月值等于日历意义上日期之间差的整月数。例如,从日历上看,2013-03-11离2013-04-01还有零个月,2013-04-11离2013-04-11还有一个月 您需要的不是日历上的月份差异,而是月份索引的算术差异。例如,2013-03-11与2013-04-01的月差为1,因为4-3=1 因此,通过以下方式获得您想要的结果:
$dobObject = DateTime::createFromFormat('Y-m-d',$dob);
$nowObject = new DateTime();
return $dobObject->format('n') - $nowObject->format('n'); // might be negative
.2008-10-03->Y-m-d这里m用前导零01到12表示。 2008-10-03->Y-n-d这里n表示没有前导零的1到12
使用n获得计算年龄的确切月份。cheers@this.lau uu值只是连接了{year}.{month}您的假设是错误的,php给出了正确的间隔:我明白了,我来看看。-1,这是错误的。在这两种情况下,代表性都是1到12,即使不是,也没有区别。你从哪里得到这个信息的?