PHP沒有操作符重載*所以+
與物體使得PHP試圖給他們先轉換爲字符串,但DateInterval
確實不支持:
interval 1: 03:05
interval 2: 05:00
Total interval : 08:05
相反,你需要創建一個新的DateTime
對象,然後使用add
函數添加間隔,最後顯示的差異參考點:
$e = new DateTime('00:00');
$f = clone $e;
$e->add($interval1);
$e->add($interval2);
echo "Total interval : ", $f->diff($e)->format("%H:%I"), "\n";
完全〔實施例/(Demo):
$a = new DateTime('14:25');
$b = new DateTime('17:30');
$interval1 = $a->diff($b);
echo "interval 1: ", $interval1->format("%H:%I"), "\n";
$c = new DateTime('08:00');
$d = new DateTime('13:00');
$interval2 = $c->diff($d);
echo "interval 2: ", $interval2->format("%H:%I"), "\n";
$e = new DateTime('00:00');
$f = clone $e;
$e->add($interval1);
$e->add($interval2);
echo "Total interval : ", $f->diff($e)->format("%H:%I"), "\n";
您也可能要考慮尋找如何DateInterval
存儲其值,然後延伸˚F從它來做你自己的計算。下面的例子(Demo)是粗糙的,它沒有考慮到the inverted thingy,它not (re)set $days
to false
和我沒有檢查/測試的the period specifier on creation ISO規範,但我認爲這足以表明這個想法:
class MyDateInterval extends DateInterval
{
/**
* @return MyDateInterval
*/
public static function fromDateInterval(DateInterval $from)
{
return new MyDateInterval($from->format('P%yY%dDT%hH%iM%sS'));
}
public function add(DateInterval $interval)
{
foreach (str_split('ymdhis') as $prop)
{
$this->$prop += $interval->$prop;
}
}
}
$a = new DateTime('14:25');
$b = new DateTime('17:30');
$interval1 = $a->diff($b);
echo "interval 1: ", $interval1->format("%H:%I"), "\n";
$c = new DateTime('08:00');
$d = new DateTime('13:00');
$interval2 = $c->diff($d);
echo "interval 2: ", $interval2->format("%H:%I"), "\n";
$e = MyDateInterval::fromDateInterval($interval1);
$e->add($interval2);
echo "Total interval: ", $e->format("%H:%I"), "\n";
*如果你編寫一個PHP擴展,它實際上是可能的(至少排序)。
一些更實驗的結合:http://codepad.viper-7.com/Lh2DtL([要點](https://開頭要點.github.com/3142405)) – hakre 2012-07-19 09:12:38
嗨,如果使用您的解決方案,總數大於60秒,60分鐘,24小時等...怎麼辦? :) – Talus 2013-01-25 14:55:41
@Talus:看到的要點,不是它是完美的,但它顯示了你如何處理。 – hakre 2013-01-25 23:22:36