今天我正在研究一个php代码,发现这真的很奇怪。
<?php
$now = new DateTime("2015-07-29 03:38:55");
$previous = new DateTime("2013-07-29 05:06:40");
$diff = $now->diff($previous);
$diff2 = $previous->diff($now);
printf("%d years, %d month, %d days, %d hours, %d minutes %d seconds.<br/>", $diff->y, $diff->m, $diff->d, $diff->h, $diff->i, $diff->s);
printf('%d years, %d month, %d days, %d hours, %d minutes %d seconds', $diff->y, $diff->m, $diff2->d, $diff2->h, $diff2->i, $diff2->s);输出是
1年11个月30天22小时32分15秒
1年11个月29天22小时32分15秒
我有两个问题
$previous->diff($now);显示$now - $previous的文档。然而,如果是相反的情况,它不是消极的吗?发布于 2015-07-29 21:07:27
我有一个推测,这可能是由于倒置。我不太清楚为什么要多加一天.但我做的一个快速改变是:
$now = new DateTime("2015-07-29 03:38:55");
$previous = new DateTime("2013-07-29 05:06:40");
$diff = $now->diff($previous);
$diff2 = $previous->diff($now);
printf("%d years, %d month, %d days, %d hours, %d minutes %d seconds\r\n", $diff->y, $diff->m, ($diff->d - $diff->invert), $diff->h, $diff->i, $diff->s);
printf('%d years, %d month, %d days, %d hours, %d minutes %d seconds', $diff->y, $diff->m, ($diff2->d - $diff2->invert), $diff2->h, $diff2->i, $diff2->s);产出如下:
1 years, 11 month, 29 days, 22 hours, 32 minutes 15 seconds
1 years, 11 month, 29 days, 22 hours, 32 minutes 15 seconds或者,或者,以上是完全错误的,只是一个巧合.另一种解释可能是差异日是$diff的浮动值,因此它被舍入.产生29天。也可能是闰年的问题。
编辑
以上也是错误的..。如果将输出更改为浮动,它将显示整数。这就增加了混乱。我会留下这个答案,可能会帮助别人想出解决办法。
$now = new DateTime("2015-07-29 03:38:55", new DateTimeZone('GMT'));
$previous = new DateTime("2013-07-29 05:06:40", new DateTimeZone('GMT'));
$diff = $now->diff($previous);
$diff2 = $previous->diff($now);
printf("%f years, %f month, %f days, %f hours, %f minutes %f seconds %f total days\r\n", $diff->y, $diff->m, $diff->d, $diff->h, $diff->i, $diff->s, $diff->days);
printf('%f years, %f month, %f days, %f hours, %f minutes %f seconds %f total days', $diff->y, $diff->m, $diff2->d, $diff2->h, $diff2->i, $diff2->s, $diff2->days);我甚至设定时区希望能有所帮助。仍然得出了完整的数字:
1.000000 years, 11.000000 month, 30.000000 days, 22.000000 hours, 32.000000 minutes 15.000000 seconds 729.000000 total days
1.000000 years, 11.000000 month, 29.000000 days, 22.000000 hours, 32.000000 minutes 15.000000 seconds 729.000000 total days发布于 2017-01-06 16:19:22
invert属性中:$diff->invert=1和$diff2->invert=0
这就是导致一个显示30天,另一个显示29天的原因。在@半疯狂的例子中,这两个日期都在DST中,所以没有更正。如果previous OP的日期是2013-07-29 03:06:40,那么它们就没有什么区别了
https://stackoverflow.com/questions/31710798
复制相似问题