Php 如何计算两个DateInterval对象的和

Php 如何计算两个DateInterval对象的和,php,datetime,date-difference,Php,Datetime,Date Difference,我有两个日期间隔对象,是否有任何默认方法添加这些间隔对象 $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 y

我有两个日期间隔对象,是否有任何默认方法添加这些间隔对象

$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
$diff_1+$diff_2
=1年6个月24天


我需要的是计算
diff_1
diff_2
的总和。

您可以将这两个
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");

最简单的方法可能是创建一个新对象并对其进行克隆,向新对象添加两个(或更多)日期时间间隔(在您的示例中是
$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天

旁注
您不必使用
format()
压缩这么多不同的格式。你可以在一行中完成这一切

echo $result->format("%y years %m months %d days");

如果不克隆
$today
,则可能会产生轻微的差异。在某些不明情况下可能会改变结果。