Арифметика дати/часу
У наступних прикладах показуються деякі підводні камені обчислень дати/часу, щодо переходів на літній та зимовий час (DST), та місяців, що мають різну кількість днів.
Приклад #1 DateTimeImmutable::add/sub додає інтервали, що охоплюють час, що минув.
Додавання PT24H через перехід DST призведе до додавання 23/25 годин (для більшості часових поясів).
Loading...
Результат виконання наведеного прикладу:
Начало: 2015-11-01 00:00:00 -04:00
Конец: 2015-11-01 02:00:00 -05:00
Приклад #2 DateTimeImmutable::modify та strtotime збільшить або зменшить значення індивідуальних компонентів
Додавання +24 годин через перехід DST додасть точно 24 години (замість обліку переходу на зимовий або літній час).
Loading...
Результат виконання наведеного прикладу:
Начало: 2015-11-01 00:00:00 -04:00
Конец: 2015-11-02 00:00:00 -05:00
Приклад #3 Додавання або віднімання часу може зменшити або збільшити дату
Наприклад, 31 січня + 1 місяць поверне 2 березня (високосний рік) чи 3 березня (звичайний рік).
Loading...
Результат виконання наведеного прикладу:
Обычный год:
Начало: 2015-01-31 00:00:00 -05:00
Конец: 2015-03-03 00:00:00 -05:00
Високосный год:
Начало: 2016-01-31 00:00:00 -05:00
Конец: 2016-03-02 00:00:00 -05:00
Для отримання останнього дня наступного місяця (тобто щоб запобігти переповненню) існує директива last day of
Loading...
Результат виконання наведеного прикладу:
Обычный год:
Начало: 2015-01-31 00:00:00 -05:00
Конец: 2015-02-28 00:00:00 -05:00
Високосный год:
Начало: 2016-01-31 00:00:00 -05:00
Конец: 2016-02-29 00:00:00 -05:00