&reftitle.examples;
Rechnen mit Datum und Uhrzeit Die folgenden Beispiele zeigen einige Fallstricke beim Rechnen mit Datum und Uhrzeit bezüglich der Sommerzeitumstellungen sowie der Monate mit unterschiedlicher Anzahl von Tagen. DateTimeImmutable::add/sub addiert Intervalle, die die verstrichene Zeit umfassen Wenn PT24H über den Zeitpunkt einer Sommerzeitumstellung hinzugefügt wird, scheinen 23/25 Stunden hinzugefügt zu werden (bei den meisten Zeitzonen). format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->add(new DateInterval("PT3H")); echo "Ende: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; ]]> &example.outputs; DateTimeImmutable::modify und strtotime erhöhen oder verringern die Werte einzelner Komponenten Wenn +24 Stunden über den Zeitpunkt einer Sommerzeitumstellung hinzugefügt werden, werden genau 24 Stunden hinzugefügt, wie sie in der Datum/Zeit-Zeichenkette zu sehen sind (es sei denn, die Anfangs- oder Endzeit liegt auf einem Übergangspunkt). format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->modify("+24 hours"); echo "Ende: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; ]]> &example.outputs; Durch die Addition oder Subtraktion von Zeiten kann das Datum über- oder unterschritten werden Zum Beispiel ergibt der 31. Januar + 1 Monat den 2. März (Schaltjahr) oder den 3. März (normales Jahr). format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->modify("+1 month"); echo "Ende: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; echo "Schaltjahr:\n"; // Februar hat 29 Tage $dt = new DateTimeImmutable("2016-01-31 00:00:00", new DateTimeZone("America/New_York")); echo "Beginn: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->modify("+1 month"); echo "Ende: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; ]]> &example.outputs; Um den letzten Tag des nächsten Monats zu erhalten (&dh; um den Überlauf zu verhindern), gibt es das Format last day of. format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->modify("last day of next month"); echo "Ende: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; echo "Schaltjahr:\n"; // Februar hat 29 Tage $dt = new DateTimeImmutable("2016-01-31 00:00:00", new DateTimeZone("America/New_York")); echo "Beginn: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->modify("last day of next month"); echo "Ende: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; ]]> &example.outputs;