В предлагаемом материале рассказывается об основах работы с датами и временем с помощью класса Zend_Date.
Обзор
Класс Zend_Date
предлагает детальный, но простой программный интерфейс для манипуляций с датами и временем. Он обладает следующими возможностями по сравнению с функциями соответствующего расширения PHP.
Простой программный интерфейс.
Полная интернационализация.
Неограниченный диапазон временных меток.
Поддержка стандарта ISO_8601.
Вычисление времени восхода и захода солнца.
Быстрый старт
Важно
Перед использованием функций PHP
для работы с датами и временем либо аналогичных методов Zend_Framework следует убедиться в том, что приложение использует правильную установку временной зоны по умолчанию (см. «Временные зоны»).
Создать объект с текущей датой и временем можно следующим образом.
$date = Zend_Date::now();
Теперь можно напрямую вывести это значение на печать.
print $date;
Mar 9, 2007 1:10:47 PM
Установить новое значение можно с помощью метода set().
$date->set(time());
Замечание
Если не указано иное (см. «Константы»), методы класса Zend_Date воспринимают переданные им аргументы как временные метки (timestamps).
Если аргумент задан неправильно и не может быть распознан, генерируется исключительная ситуация Zend_Date_Exception.
Получить
новое значение можно с помощью метода get().
print $date->get();
1173438910
Сложение и вычитание производится с помощью методов add() и sub().
Mar 9, 2007 1:20:00 PM
Mar 9, 2007 2:20:00 PM
Mar 9, 2007 12:20:00 PM
Константы
Класс Zend_Date может работать с отдельными компонентами даты и времени. Для того, чтобы задать, каким именно образом следует рассматривать переданный аргумент, используется дополнительный аргумент - константа класса Zend_Date. Например, константа Zend_Date::DAY
специфицирует основной аргумент как «день», константа Zend_Date::DATES обозначает стандартизованную (и локализованную) дату (день. месяц и год) и т. д.
Из остальных наиболее важных констант следует перечислить Zend_Date::YEAR, Zend_Date::MONTH, Zend_Date::HOUR, Zend_Date::MINUTE и Zend_Date::SECOND, а также Zend_Date::TIMES, Zend_Date::WEEKDAY, Zend_Date::MONTH_NAME и
Zend_Date::DATE_FULL.
Полный список констант класса Zend_Date можно найти в документации к Zend_Framework [11].
Методы
Избежать использования второго дополнительного
параметра (см. «Константы») зачастую можно, используя специфический для данного случая метод.
print $date->getIso(); // equivalent to get(Zend_Date::ISO_8601)
2007-03-09T15:52:55+02:00
$date->addYear(1); // equivalent to add(1, Zend_Date::YEAR)
При
необходимости можно воспользоваться еще одним дополнительным параметром для «принудительной» локализации (см. Глава 15, Класс Zend_Locale).
print $date->get(Zend_Date::DATE_FULL, 'ru_RU');
9 марта 2007 г.
Класс Zend_Date предоставляет удобные возможности для сравнения дат и времени. Наряду с универсальными методами compare() и equals() (и их модификациями), определены методы isEarlier(), isLater(), isToday(), isYesterday(), isTomorrow().
Получить список доступных городов можно с помощью статического метода getCityList().
Временные зоны
Временная
зона (timezone) по умолчанию устанавливается директивой date.timezone в файле php.ini и может быть перекрыта с помощью функции date_default_timezone_set().
Замечание
Обе указанные возможности доступны, начиная с версии PHP 5.1.0.
date.timezone = "Europe/Kiev"
date_default_timezone_set('Europe/Kiev');
При создании объекта Zend_Date его временная зона становится временной
зоной по умолчанию. При этом исчезает необходимость явно указывать, следует ли учитывать т. н. «летнее время» (Daylight Savings Time, DST), так как подобный учет производится автоматически.
Полный перечень существующих временных зон может быть найден здесь,
а также в «Руководстве по PHP» [2][3].
Проверьте, правильно ли установлена временная зона в файле php.ini на доступных вам серверах.
Предложите код для проверки, не наступило ли 12 мая 2007 г.
Разработайте код и определите время восхода солнца в Москве (Moscow) 1 апреля 2007 г.
С
2007 г. в Северной Америке устанавливается новый порядок введения и отмены летнего времени (за исключением тех немногих территорий, где летнее время вообще не применяется). Летнее время будет вводиться со второго воскресенья марта и отменяться в первое воскресенье ноября. Разработайте код и проверьте, поддерживает ли Zend Framework данное нововведение.
Подсказка
Для проверки используйте временную зону «America/New_York» и константу Zend_Date::DAYLIGHT (get(Zend_Date::DAYLIGHT) возвращает 0, если время не является «летним», и
1 - в противном случае).