среда, 14 августа 2013 г.

Работа со временем и датами в PHP

Для работы со временим и датами в PHP 5.2 и выше существует класс DateTime. Он заменяет функционал старых функций для работы со времением/датами.
Чтобы получить текущую дату/время нужно создать объект DateTime без передачи ему параметров.

$now = new DateTime(); 

Для получения объекта DateTime из строки содержащей время существует статический метод createFromFormat(string $format, string $time). Первый параметр - формат передаваемой даты/времени. Второй параметр - строка содаржащая дату/время в формате, переданном в первом параметре %)

Формат даты/времени может выглядеть например так:

Y-m-d H:i:s

что означает запись например такого вида:

2009-02-15 15:16:17.

В приведенной выше строке формата латинские буквы означают следующее:

  • Y -- запись года четырьмя цыфрами (например 2013);
  • m -- запись месяца двумя цыфрами с 01 по 12 (например 07);
  • d -- день месяца двумя цыфрами с 01 по 31;
  • H -- запись часа в 24-ох часовом формате двумя цыфрами с 00 до 23;
  • i -- минуты с нулем в начале;
  • s-- секунды с нулем в начале.

Существуют так же следующие символы формата даты/времени:

  • D и l -- текстовое представление дня месяца (От Mon до Sun либо от Sunday до Saturday);
  • z -- номер дня с начала года;
  • F и M -- текстовое представление месяца, например January или Sept;
  • y -- 2 цифровое представление года (например 03 -- это 2003 год);
  • a и A -- до полудня и После полудня (am или pm);
  • g и h -- 12-ти часовой формат времени с первым нулем или без него.

Для обратного преобразования объекта DateTime в строку существует метод format(string $format). В качестве параметра принимает строку с форматом даты/времени (таким же как в методе createFromFormat).

Для того чтобы вычесть или добавить в дате/времени какой-либо интервал времени (например 2 часа или 3 месяца), нужно воспользоваться методом add(DateInterval $interval) или sub(DateInterval $interval). ВАЖНО: Преобразование применяется к объекту для которого вызавается метод. В качестве параметров эти методы принимают объект класса DateInterval.

В качестве параметра конструктор этого класса принимает строку с интревалом времени в формате из спецификации ISO 8601. В соответсвии с ней: строка с интервалом времени начинается с латинсткой буквы P. Длина каждого периода описывается целым значением и следующим за ним указателем периода. Если длина периода содержит время, то его описанию должна предшествовать буква T. Например 2 дня записываются так -- P2D. Две секунды -- PT2S. Допустимы следующие обозначения интервалов:

  • Y -- года;
  • M -- месяцы;
  • D -- дни;
  • W -- недели;
  • H -- часы;
  • M -- минуты;
  • S -- секунды.

Помимо конструктора создать объект интервала времени можно с помощью статического метода DateInterval::createFromDateString(string $time). Он принимает в качестве параметра строку с интервалом времени в более читаемом виде. Например:
1 day
2 weeks
3 months
и даже
1 year + 1 day
1 day + 12 hours.


Таким образом благодаря классу DateTime работа с датами и временем в PHP не вызывает сложностей.

Комментариев нет:

Отправить комментарий