Как рассчитать сумму двух объектов DateInterval

У меня есть два объекта интервала даты, есть ли метод по умолчанию, чтобы добавить эти объекты интервала?

$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?

1

Решение

Вероятно, самый простой способ — создать новый объект и клонировать его, добавив два (или более) 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 день.

Живая демо

Примечание
Вам не нужно согласовывать так много разных форматов с вашим format(), Вы можете сделать все это в одной строке,

echo $result->format("%y years %m months %d days");
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");
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector