360 days/year, 30 days/month 格式的两个日期如何相差?

How to get the difference between two dates with 360 days/year, 30 days/month format?

我可以使用以下代码获取两个日期(DD/MM/YY 格式)之间的差异;

$date1   = new DateTime("1986-04-27");
$today  = new DateTime("now");
$interval   = $date1->diff($today);
$year       = $interval->format('%y');
$month      = $interval->format('%m');
$day        = $interval->format('%d');

它在计算 1 年 2 个月时完美无缺,但当我尝试计算 1 年 2 个月 3 天时,它没有给我准确的结果。

我想得到两个日期之间的差异,一年360天,一个月30天,不计算闰年..

例如;如果一个月有 31 天,系统将按 30 天计算。 如果一年有 365 天,系统将按 1 年 5 天计算。 (360 + 5)

我该怎么做?

谢谢..

DateTime class 将根据实际日期计算差异。在您的示例中它是否有效是随机的。如果你想为月份使用自定义长度,忽略闰年等,那么你将不得不自己创建自定义函数。

虽然我不太明白这样做的意义?

只需获取天数并减去年/月。

$totalDays = $interval->format('%a');
$years = 0;
$months = 0;
while ($totaldays >= 360) { $years++; $totaldays -=360; }
while ($totaldays >= 30) { $months++; $totaldays -=30; }
$days = $totalDays

但为什么需要损坏的日期格式?

方法如下:

function diff360($date1, $date2) {
    $date1 = new DateTime($date1);
    $date2 = new DateTime($date2);
    $diff = $date1->diff($date2);
    $days = ($date2->format('d') + 30 - $date1->format('d')) % 30;
    return array(
        "y" => $diff->y,
        "m" => $diff->m,
        "d" => $days,
        "totaldays" => $diff->y * 360 + $diff->m * 30 + $days
    );
}

$result = diff360("2016-02-06", "2016-03-06");
var_export($result);

输出:

array (
  'y' => 0,
  'm' => 1,
  'd' => 0,
  'totaldays' => 30,
)