PHP ha nessun sovraccarico operatore * così +
con oggetti rende PHP provare a convertirli in stringa prima, ma DateInterval
fa Non supportarlo:
interval 1: 03:05
interval 2: 05:00
Total interval : 08:05
Invece è necessario creare un nuovo DateTime
oggetto, quindi utilizzare la funzione add
per aggiungere gli intervalli e, infine, visualizzare la differenza dal punto di riferimento:
$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";
si potrebbe anche prendere in considerazione cercando how DateInterval
memorizza i suoi valori e quindi estendere f rom per fare il calcolo tuo. Il seguente esempio (Demo) è grezzo, esso non tiene conto the inverted thingy, lo fa not (re)set $days
to false
e non ho controllato/testata la specifica ISO di the period specifier on creation ma penso che è sufficiente a mostrare l'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";
* Se si scrive un'estensione PHP, in realtà è possibile (almeno in ordine).
Alcuni altri esperimenti: http://codepad.viper-7.com/Lh2DtL ([gist] (https: // Gist .github.com/3142405)) – hakre
Ciao, e se, con la tua soluzione, il totale è superiore a 60 secondi, 60 minuti, 24 ore, ... ecc.? :) – Talus
@Talus: guarda il senso, non che è perfetto, ma mostra come puoi gestirlo. – hakre