Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 日期时间差异在月份中存在不一致_Php_Datetime - Fatal编程技术网

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,即使不是,也没有区别。你从哪里得到这个信息的?