Вычесть DateInterval из другого DateInterval

$date1 = new DateInterval('PT100S'); //100 seconds
$date2 = new DateInterval('PT20S');  //20 seconds

Как сделать $date1 - $date2? Я искал в Google в течение нескольких часов.

2

Решение

использование формат чтобы получить количество секунд, затем выполните вычитание.

echo $date1->format('%s') - $date2->format('%s');

Это то, что вы хотели?

2

Другие решения

Это должно работать для вас:

Здесь я просто получаю array_intersect_key() из определенного $keysс обоими объектами DateInterval. Так что я затем могу пройти через оба массива с array_map() и вычесть значения. С вычисленными значениями я создаю новый DateInterval объект, который я потом возвращаю.

<?php

$date1 = new DateInterval('PT100S');
$date2 = new DateInterval('PT20S');

function subtractDateIntervals($intervalOne, $intervalTwo) {
$keys = ["y", "m", "d", "h", "i", "s"];

$intervalArrayOne = array_intersect_key((array)$intervalOne, array_flip($keys));
$intervalArrayTwo = array_intersect_key((array)$intervalTwo, array_flip($keys));

$result = array_map(function($v1, $v2){
return abs($v1 - $v2);
}, $intervalArrayOne, $intervalArrayTwo);

return new DateInterval(vsprintf("P%dY%dM%dDT%dH%dM%dS", $result));


}

var_dump(subtractDateIntervals($date1, $date2));

?>

выход:

object(DateInterval)#3 (15) {
//...
["s"]=>
int(80)
//...
}
1

По вопросам рекламы [email protected]