如何获得360天/年,30天/月格式的两个日期之间的差异?

时间:2016-03-06 20:59:36

标签: php date datetime timestamp diff

我可以使用以下代码获得两个日期(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)

我该怎么做?

谢谢..

3 个答案:

答案 0 :(得分:2)

以下是这样做的方法:

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,
)

答案 1 :(得分:1)

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

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

但为什么你需要一个破碎的日期格式?

答案 2 :(得分:0)

DateTime类将根据实际日期计算差异。在你的例子中,它是否会起作用是随机的。如果你想使用几个月的自定义长度,忽略闰年等,那么你必须自己创建自定义函数。

我真的不明白这样做的意义吗?