在 PHP 中处理日期和时间时,我们经常需要执行涉及日期间隔的计算。 PHP 提供了 DateInterval 类来表示时间长度。然而,添加两个 DateInterval 对象并不简单。
出现这个问题是因为 PHP 不支持对象的运算符重载。因此,对 DateInterval 对象使用运算符会尝试将它们转换为字符串,但这是不受支持的。这会导致意外的行为和不正确的计算。
要添加两个 DateInterval 对象,我们可以使用以下方法:
这是一个完整的示例:
<code class="php">$a = new DateTime('14:25'); $b = new DateTime('17:30'); $interval1 = $a->diff($b); echo "interval 1: " . $interval1->format("%H:%I"); echo "<br />"; $c = new DateTime('08:00'); $d = new DateTime('13:00'); $interval2 = $c->diff($d); echo "interval 2: " . $interval2->format("%H:%I"); echo "<br />"; $e = new DateTime('00:00'); $f = clone $e; $e->add($interval1); $e->add($interval2); echo "Total interval: " . $f->diff($e)->format("%H:%I") . "\n";</code>
此解决方案创建一个新的 DateTime 对象 $e 并将其设置为午夜 (00:00)。然后,它使用 add 方法将第一个和第二个 DateInterval 对象($interval1 和 $interval2)添加到 $e 中。最后,它计算原始参考点($f,也是午夜)和更新后的 $e 之间的差异,以获得总持续时间。
对于更复杂的场景,我们可以扩展 DateInterval 类来定义我们自己的添加 DateInterval 对象的行为。这使我们能够以更方便的格式存储持续时间并更有效地执行计算。
这是扩展类的示例:
<code class="php">class MyDateInterval extends DateInterval { 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";</code>
在此示例中,MyDateInterval 类扩展了 DateInterval并重写 add 方法来累积每个组件的持续时间(年、月、日、小时、分钟和秒)。通过使用这个扩展类,我们可以更加高效、方便的添加DateInterval对象。
以上是如何在 PHP 中添加两个 DateInterval 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!