有人可以在下面的例子中解释DateTime :: diff()的结果:
$start = DateTime::createFromFormat('Y/m/d', '2013/05/11');
$end = DateTime::createFromFormat('Y/m/d', '2015/03/08');
$diff = $start->diff($end);
var_dump($diff);
exit;
结果:
object(DateInterval)#19 (15) {
["y"]=>
int(1)
["m"]=>
int(9)
["d"]=>
int(25)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
int(666)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}
我认为这是在这里发生的事情: $ diff-> y为1,因为日期之间有一个完整年; $ diff-> m为9,因为日期之间有9个完整个月(没有2013/05和2015/03)。
我想知道如何计算25号。我无法弄清楚这个号码的来源。
我期待2013/05/11和2013/05/31 + 2015/03/01和2015/03/08之间的区别,所以20 + 7 = 27.相反,我得到25。
答案 0 :(得分:1)
我认为这是在这里发生的:$ diff-> y是1,因为日期之间有一个完整的年; $ diff-> m为9,因为日期之间有9个完整个月(没有2013/05和2015/03)。
这个假设是正确的。
我期待2013/05/11和2013/05/31 + 2015/03/01 + 2015/03/08之间的差异,所以20 + 7 = 27。
这是相当容易混淆的写作,我花了一段时间才弄明白你的意思,但这就是为什么你不能指望......
您期望在2013/05/11(您的原始"来自"日期)和2015 / 02/11 之间有什么不同?正好一年9个月,对吧?
嗯,这是怎么回事 - 当的某一天匹配时,会达到一个月的差异。对于您所拥有的日期,2013/02/11是月差异计数从8增加到9的点,并且日期从上的开始计算。
其余的很容易 - 二月(在那一年)有28天,所以你得到(28 - 11) + 8 = 25
天。