Сложение и вычитание дат

Задача
Необходимо добавить или вычесть интервал из даты.

Решение
В зависимости от способа представления даты и интервала, следует применять функцию strtotime() или некоторые простые арифметические функции. Если дата и интервал представлены в соответствующем формате, то проще обратиться к функции strtotime():

$birthday = 'March 10, 1975';
$whoopee_made = strtotime("$birthday - 9 months ago");

Если дата представлена в виде метки времени UNIX, а интервал можно выразить в секундах, то надо вычесть интервал из метки времени:

$birthday = 163727100;
$gestation = 36 * 7 * 86400; // 36 weeks
$whoopee_made = $birthday - $gestation;

Обсуждение
Функцию strtotime() удобно применять с интервалами переменной длины, такими как месяцы. Если нельзя использовать эту функцию, то можно преобразовать дату в метку времени и добавить или вычесть интервал в секундах. Это удобнее всего для интервалов с фиксированным временем, таких как дни или недели:

$now = time();
$next_week = $now + 7 * 86400;

Однако данный способ может привести к трудностям, если границы интервала находятся по разные стороны от момента перехода на летнее время.


В этом случае длина одного из дней не будет равна 86 400 секундам, а составит либо 82 800, либо 90 000 секунд, в зависимости от сезона. Если приложение работает исключительно с UTC, то об этом можно не беспокоиться. Но если необходимо учитывать местное время, то избежать трудностей при подсчете дней поможет юлианское представление дат. Преобразования между метками времени и юлианскими датами обечпечивают функции unixtojd() и jdtounix():

$now = time();
$today = unixtojd($now);
$next_week = jdtounix($today + 7);
// don't forget to add back hours, minutes, and seconds
$next_week += 3600 * date('H',$now) + 60 * date('i',$now) + date('s',$now);

Функции unixtojd() и jdtounix() входят в модуль calendar и поэтому доступны, только если PHP собран с его поддержкой (версия для Windows имеет встроенную поддержку данного расширения).

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Вывод на печать даты и времени в определенном формате
Выделение дат и времен из строк
Выработка высокоточного времени
Определение дня недели, месяца, года или номера недели в году
Определение разности между датами юлианского календаря

Вернуться в раздел: PHP / 3. Дата и время