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

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

Решение
В зависимости от способа представления даты и интервала, следует применять функцию 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 имеет встроенную поддержку данного расширения).
Теги:
интервал, времени, birthday, strtotime, unixtojd, функции, jdtounix, вычесть, можно, today, gestation, секундах, метки, whoopee, время, интервала, добавить, функцию, применять, зависимости, трудностей, будет, Преобразования, поможет, подсчете, равна, секунд, секундам, сезона, составит, избежать, учитывать, необходимо, беспокоиться, между
Добавлено: 21 Июля 2018 06:59:21 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...