代码之家  ›  专栏  ›  技术社区  ›  Ebin Manuval

如何计算两个日期间隔对象的和

  •  1
  • Ebin Manuval  · 技术社区  · 5 年前

    我有两个日期间隔对象,有没有默认的方法来添加这些间隔对象?

    $date1 = date_create("2013-03-15");
    $date2 = date_create("2013-12-12");
    $diff_1=date_diff($date1,$date2);
    echo $diff_1->format("%y years").' '.$diff_1->format("%m months"). ' ' . $diff_1->format("%d days");
    //0 years 8 months 27 days
    
    $date3 = date_create("2015-02-15");
    $date4 = date_create("2015-12-12");
    $diff_2=date_diff($date3,$date4);
    echo $diff_2->format("%y years").' '.$diff_2->format("%m months"). ' ' . $diff_2->format("%d days");
    //0 years 9 months 27 days
    
    < Buff行情>

    $diff_1+$diff_2 =1年6个月24天

    < /块引用>

    我需要的是计算 diff_1 diff_2 ?

    2 回复  |  直到 5 年前
        1
  •  2
  •   Qirel    5 年前

    可能最简单的方法是创建一个新对象并克隆它,添加两个(或更多)日期时间间隔(在您的情况下 $diff_1 $diff_2 )到新对象。现在,找到新对象和它的克隆之间的区别,是您最初拥有的两个日期时间间隔的总和。

    // Define two intervals
    $date1 = date_create("2013-03-15");
    $date2 = date_create("2013-12-12");
    $diff_1 = date_diff($date1,$date2);
    
    $date3 = date_create("2015-02-15");
    $date4 = date_create("2015-12-12");
    $diff_2 = date_diff($date3,$date4);
    
    
    // Create a datetime object and clone it
    $dt = new DateTime();
    $dt_diff = clone $result;
    
    // Add the two intervals from before to the first one
    $dt->add($diff_2);
    $dt->add($diff_1);
    
    // The result of the two intervals is now the difference between the datetimeobject and its clone
    $result = $dt->diff($dt_diff);
    var_dump($result);
    

    转储结果包括

      ["y"]=>
        int(1)
      ["m"]=>
        int(6)
      ["d"]=>
        int(21)
    

    ,即1年、6个月和21天。

    Live demo

    sidenote
    你不必用你的 format() . 你可以在一行中完成这一切,

    echo $result->format("%y years %m months %d days");
    
        2
  •  0
  •   Qirel    5 年前

    两个都可以添加 DateInterval 对象到新对象 DateTime 对象,然后再次计算差异。

    <?php
    
    $date1 = date_create("2013-03-15");
    $date2 = date_create("2013-12-12");
    $diff_1=date_diff($date1,$date2);
    echo $diff_1->format("%y years").' '.$diff_1->format("%m months"). ' ' . $diff_1->format("%d days");
    //0 years 8 months 27 days
    
    $date3 = date_create("2015-02-15");
    $date4 = date_create("2015-12-12");
    $diff_2=date_diff($date3,$date4);
    echo $diff_2->format("%y years").' '.$diff_2->format("%m months"). ' ' . $diff_2->format("%d days");
    //0 years 9 months 27 days
    
    $today = new DateTime();
    $today->add($diff_1);
    $today->add($diff_2);
    $diff_total = $today->diff(new DateTime());
    
    echo $diff_total->format("%y years").' '.$diff_total->format("%m months"). ' ' . $diff_total->format("%d days");