&reftitle.examples;
Arytmetyka daty/czasu Poniższe przykłady pokazują niektóre pułapki arytmetyki daty i czasu w odniesieniu do przejść DST (czas letni) i miesięcy o różnej liczbie dni. DateTimeImmutable::add/sub dodaje interwały obejmujące czas, który upłynął Dodanie PT24H do przejścia DST spowoduje dodanie 23/25 godzin (dla większości stref czasowych). format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->add(new DateInterval("PT3H")); echo "Koniec: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; ]]> &example.outputs; DateTimeImmutable::modify and strtotime zwiększają lub zmniejszają poszczególne wartości składowe Dodanie +24 godzin do czasu przejścia na czas letni (DST) spowoduje dodanie dokładnie 24 godzin widocznych w ciągu daty/godziny (chyba, że czas początkowy lub końcowy znajduje się w punkcie przejścia). format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->modify("+24 hours"); echo "Koniec: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; ]]> &example.outputs; Dodawanie lub odejmowanie czasów może spowodować przepełnienie lub niedopełnienie dat Na przykład, gdy 31 stycznia + 1 miesiąc spowoduje 2 marca (rok przestępny) lub 3 marca (normalny rok). format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->modify("+1 month"); echo "Koniec: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; echo "Rok przestępny:\n"; // February has 29 days $dt = new DateTimeImmutable("2016-01-31 00:00:00", new DateTimeZone("America/New_York")); echo "Początek: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->modify("+1 month"); echo "Koniec: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; ]]> &example.outputs; Aby uzyskać ostatni dzień następnego miesiąca (tj. aby zapobiec przepełnieniu) dostępny jest format last day of. format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->modify("last day of next month"); echo "Koniec: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; echo "Rok przestęny:\n"; // Luty 29 dni $dt = new DateTimeImmutable("2016-01-31 00:00:00", new DateTimeZone("America/New_York")); echo "Początek: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; $dt = $dt->modify("last day of next month"); echo "Koniec: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL; ]]> &example.outputs;