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

问题描述 投票:1回答:2

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

$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_1diff_2的总和?

php datetime date-difference
2个回答
2
投票

在可能最简单的方法是创建一个新的对象和克隆它,添加两个(或更多)DateTimeIntervals(在你的情况$diff_1$diff_2)给新的对象。现在寻找新的对象和它的克隆之间的区别,就是你原来有两个DateTimeIntervals的总和。

// 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

边注 你不必与你format()到Concat的这么多不同的格式。你可以做到这一切在一个单一的线,

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

0
投票

你既可以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");
© www.soinside.com 2019 - 2024. All rights reserved.