Арифметика дати/часу

У наступних прикладах показуються деякі підводні камені обчислень дати/часу, щодо переходів на літній та зимовий час (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