从另一个 DateInterval 中减去一个 DateInterval
Substract a DateInterval from another DateInterval
$date1 = new DateInterval('PT100S'); //100 seconds
$date2 = new DateInterval('PT20S'); //20 seconds
如何制作$date1 - $date2
?我在 google 上搜索了几个小时。
用format得到秒数,然后做减法。
echo $date1->format('%s') - $date2->format('%s');
这是你想要的吗?
这应该适合你:
这里我只是得到了 array_intersect_key()
from the defined $keys
, with both DateInterval objects. So that I then can loop through both arrays with array_map()
and subtract the values. With the calculated values I create a new DateInterval
对象,然后我 return.
<?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)
//...
}
$date1 = new DateInterval('PT100S'); //100 seconds
$date2 = new DateInterval('PT20S'); //20 seconds
如何制作$date1 - $date2
?我在 google 上搜索了几个小时。
用format得到秒数,然后做减法。
echo $date1->format('%s') - $date2->format('%s');
这是你想要的吗?
这应该适合你:
这里我只是得到了 array_intersect_key()
from the defined $keys
, with both DateInterval objects. So that I then can loop through both arrays with array_map()
and subtract the values. With the calculated values I create a new DateInterval
对象,然后我 return.
<?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)
//...
}