月份差异有问题,以下函数会返回月份年龄
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
我找不到有什么问题,有什么想法吗?
答案 0 :(得分:0)
没有四舍五入,只是你的“月差异”概念与DateInterval
使用的概念不同。
减去两个DateTime
值会使结果DateInterval
的“月”值等于整个的数量(在日历意义上)日期之间的差异月数。例如,在日历方面,2013-03-11距离2013-04-01零距离(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
<强> See the difference live 强>
答案 1 :(得分:-1)
2008-10-03 - &gt; Y - m - d这里m代表前导零01到12。 2008-10-03 - &gt; Y - n - d这里n表示没有前导零1到12。
使用n获取计算年龄的确切月份。欢呼声