我正在尝试计算一个 php 项目的两个日期之间的差异。
例如:4 月 2 日和 6 月 1 日有什么区别?
第一种计算差异的方法
从 4 月 2 日到 5 月 2 日 = 1 个月。从 5 月 2 日到 6 月 1 日 = 30 天。=> 4 月 2 日至 6 月 1 日 = 1 个月零 30 天
计算差值的第二种方法
我们计算可能为 1 个月。然后添加从 4 月 2 日到 30 日(28 天)和 6 月(1 天)的天数 => 1 个月和 29 天。
我认为第一种方法是正确的,只是因为我认为大多数人都是这样计算的。
所以起初我尝试使用 DateTime::diff() 函数
function dateDiff($date1, $date2 = false) {
if (!$date2)
$date2 = date('Y-m-d');
$datetime1 = new DateTime($date1 , new DateTimeZone('EUROPE/Sofia'));
$datetime2 = new DateTime($date2 , new DateTimeZone('EUROPE/Sofia'));
$interval = $datetime1->diff($datetime2);
$y = $interval->format('%y');
$m = $interval->format('%m');
$d = $interval->format('%d');
return $y . " " . $m . " " . $d;
}
但我注意到它没有正确计算差异。'2015-02-03' 和 '2015-04-02' 之间的差异应该是1 个月和 30 天,(02-03 到 03-03 = 1 个月。然后我们将剩余的天数计算到 04-02 ,即 30), 但diff 计算为1 个月和 27 天(我猜它是通过我上面所说的第二种方法计算差异)。因此,要么计算错误,要么第二种方法是正确的计算方式。
但是让我们看看这个例子:2015-05-01 和 2015-03-31(我们这次要倒退)。差异返回1 个月的差异,我认为应该是1 月和 1 天。
此外,2015-05-01 和 2015-02-28 之间的差异应该是2 个月零 1 天,但 diff 函数返回2 个月零 3 天。
那么,计算两个日期之间差异的正确方法是什么?DateTime::diff() 计算是否正确?有没有办法通过第一种方法计算两个日期之间的差异。