Сложение и вычитание дат при помощи языка программирования PHP.
Решение
В зависимости от способа представления даты и интервала, следует применять функцию 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 имеет встроенную поддержку данного расширения).
Комментарии:
Комментариев нет
|
|
|