PHP no tiene la sobrecarga de operadores * por lo +
con objetos hace que PHP intente que convertirlos a primera cadena, pero DateInterval
hace no es compatible con eso:
interval 1: 03:05
interval 2: 05:00
Total interval : 08:05
lugar es necesario crear una nueva DateTime
objeto, a continuación, utilizar la función add
añadir los intervalos y, finalmente, mostrar la diferencia en el punto de referencia:
$e = new DateTime('00:00');
$f = clone $e;
$e->add($interval1);
$e->add($interval2);
echo "Total interval : ", $f->diff($e)->format("%H:%I"), "\n";
completa Exmaple/(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";
también puede ser que desee considerar el mirar cómo DateInterval
almacena sus valores y luego extender f roma para hacer tu propio cálculo. El siguiente ejemplo (Demo) es áspera, que no toma en cuenta the inverted thingy, lo hace not (re)set $days
to false
y no he comprobado/probado la especificación ISO de the period specifier on creation pero creo que es suficiente para mostrar la idea:
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";
* Si escribe una extensión de PHP, en realidad es posible (al menos tipo de).
Algunos más experimentos: http://codepad.viper-7.com/Lh2DtL ([GIST] (https: // GIST .github.com/3142405)) – hakre
Hola, ¿y si, con tu solución, el total es mayor a 60 segundos, 60 minutos, 24 horas, ... etc.? :) – Talus
@Talus: Vea lo esencial, no es que sea perfecto, pero muestra cómo puede manejar eso. – hakre