月份有问题,下面的函数返回月份
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相差0个月(2013-04-11则相差1个月)。
您想要的不是日历上的月份差异,而是月份索引的算术差异。例如,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表示。更新:2007-10-03 -> Y - n - d这里n表示不带前导零的1到12。
使用n来获得计算年龄的确切月份。欢呼声