首页 文章

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

提问于
浏览
1

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

  • 2

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

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

  • 0

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

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

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

  • 1

    这是做到这一点的方法:

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

相关问题