Отправляет email-рассылки с помощью сервиса Sendsay

PHP 5: Новые возможности.

  Все выпуски  

ZEND FRAMEWORK: Класс Zend_Date


PHP 5: Новые возможности.

[Важно]Важно

Перед использованием функций 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().

print $date;
$date->add(3600); // 1 hour
print $date;
$date->sub(7200); // 2 hour
print $date;
        
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 обозначает стандартизованную (и локализованную) дату (день. месяц и год) и т. д.

$date->get(Zend_Date::DATES);
Mar 9, 2007
$date->add(1, Zend_Date::DAY);
$date->get(Zend_Date::DATES);
        
Mar 10, 2007

Из остальных наиболее важных констант следует перечислить 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().

print $date->compareYear(2011)
-1
var_dump($date->isEarlier('12:00:00', Zend_Date::TIMES));
bool(false)

Узнать, является ли год високосным, позволяет метод isLeapYear().

var_dump($date->isLeapYear());
bool(false)

Методы getSunRise() и getSunSet() позволяют узнать время восхода и захода Солнца для заданной местности.

$location = array('latitude' => 50, 'longitude' => 24); // Lviv
print $date->getSunSet($location);
        
Mar 9, 2007 6:15:05 PM
[Подсказка]Подсказка

Для некоторых городов можно воспользоваться статическим методом City() класса Zend_Date_Cities.

print $date->getSunSet(Zend_Date_Cities::City('Rome'));
Mar 9, 2007 7:06:11 PM

Получить список доступных городов можно с помощью статического метода 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].

  1. Определите временную зону, соответствующую вашему местонахождению.

  2. Проверьте, правильно ли установлена временная зона в файле php.ini на доступных вам серверах.

  3. Предложите код для проверки, не наступило ли 12 мая 2007 г.

  4. Разработайте код и определите время восхода солнца в Москве (Moscow) 1 апреля 2007 г.

  5. С 2007 г. в Северной Америке устанавливается новый порядок введения и отмены летнего времени (за исключением тех немногих территорий, где летнее время вообще не применяется). Летнее время будет вводиться со второго воскресенья марта и отменяться в первое воскресенье ноября. Разработайте код и проверьте, поддерживает ли Zend Framework данное нововведение.

    [Подсказка]Подсказка

    Для проверки используйте временную зону «America/New_York» и константу Zend_Date::DAYLIGHT (get(Zend_Date::DAYLIGHT) возвращает 0, если время не является «летним», и 1 - в противном случае).

«Ответы и решения к Глава 16, Класс Zend_Date»

Created with DocBook


В избранное