日期时间差异在月份中不一致



月份有问题,下面的函数返回月份

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来获得计算年龄的确切月份。欢呼声

相关内容

  • 没有找到相关文章

最新更新