She*_*Ali 28 php datetime addition dateinterval
我想添加两个日期间隔来计算小时和分钟的总持续时间,实际上我想要执行addittion,如下所示:
$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 />";
echo "Total interval : " . $interval1 + $interval2;
Run Code Online (Sandbox Code Playgroud)
任何想法如何执行这种类型的间隔添加,以获得PHP中的总小时和分钟格式的两个间隔的总和
hak*_*kre 42
PHP没有运算符重载*因此+对象使PHP尝试将它们首先转换为字符串,但DateInterval不支持:
interval 1: 03:05
interval 2: 05:00
Total interval : 08:05
Run Code Online (Sandbox Code Playgroud)
相反,您需要创建一个新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";
Run Code Online (Sandbox Code Playgroud)
完整的Exmaple /(演示):
$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";
Run Code Online (Sandbox Code Playgroud)
您可能还想考虑如何DateInterval存储其值,然后从中扩展以进行自己的计算.下面的例子(演示)是粗糙的,它没有考虑到倒啄,它并没有(重新)设置$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";
Run Code Online (Sandbox Code Playgroud)
*如果您编写PHP扩展,它实际上是可能的(至少是排序).
此功能允许您组合任意数量的DateIntervals
/**
* Combine a number of DateIntervals into 1
* @param DateInterval $...
* @return DateInterval
*/
function addDateIntervals()
{
$reference = new DateTimeImmutable;
$endTime = clone $reference;
foreach (func_get_args() as $dateInterval) {
$endTime = $endTime->add($dateInterval);
}
return $reference->diff($endTime);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22004 次 |
| 最近记录: |