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

问题描述 投票:0回答:4

我可以使用以下代码获取两个日期之间的差异(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)

我该怎么做?

谢谢你..

php date datetime timestamp diff
4个回答
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
投票

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

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

但是为什么你需要一个损坏的日期格式?


0
投票

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

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


© www.soinside.com 2019 - 2024. All rights reserved.