php 给字符添加间距,我们如何在PHP中添加两个日期间隔

这篇博客介绍了PHP中DateInterval对象不支持运算符重载的问题,以及如何通过创建新的DateTime对象并使用add函数来累加日期间隔。示例代码展示了如何计算两个日期间隔的总和,并提出了一种自定义类MyDateInterval扩展DateInterval的思路,以支持加法操作。此外,还提及了通过编写PHP扩展实现运算符重载的可能性。
摘要由CSDN通过智能技术生成

小编典典

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";

完整示例/(演示):

$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存储其值,然后从中扩展以自己计算。以下示例(Demo)很粗糙,它没有考虑到倒置的东西,也没有($days``false重置为,并且我还没有在创建时检查/测试周期说明符的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扩展,实际上是有可能的(至少是排序的)。

2020-05-26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值