framework.zend.com
Stable релиз 2.0 / 1.12

Особенности работы с годом в Zend_Date

Сегодня заметил я забавную вещь. На проекте которым сейчас занимаюсь все даты за текущий день переместились в будущее, например когда я вбивал дату 29.12.2008, она превращалась в 29.12.2009. В проекте используется Zend Framework и Zend_Date в частности. Для работы с датой я использовал формат "dd.MM.YYYY". Причем раньше все работало как часы и нареканий не было. Полез я в исходники, но за полчаса анализа ничего толком не нашел. Тогда я решил, что это баг и стал просматривать багтрекер, где и нашел решение проблемы.

Оказалось, что я использовал не верную константу для обозначения года, необходимо использовать "yyyy" вместо "YYYY". Разница в том, что "y" обозначает реальный год, а "Y" год в формате ISO 8601. Этот формат используется для календарей, когда мы хотим вывести например список дней месяца, и при этом написать год (не каждый день месяца будет реально принадлежать этому году).

Вот такая не большая особенность может привести к довольно не приятным последствиям. Так что если вы используете константу "Y" будьте внимательны. Решил написать об этом, так как в багтрекере уже не один человек заявил об этом баге, который в итоге оказался фичей.

Описание проблемы в багтрекере.
Список констант для форматирования даты.

метки: zend_date
Лучший способ следить за обновлениями сайта это подписаться на RSS
Если информация была полезной для вас, вы можете поддержать сайт.
Комментарии:
LokiDi L0ck 29.01.2009 14:19 #
В доках об этом сказано. Внимательней читать надо было.
Ответить
White_Owl 20.02.2009 16:59 #
Спасибо, полезная информация. Столкнулся с аналогичной проблемой при разработке модуля для Magento.
Ответить
olga 27.03.2009 09:17 #
Я столкнулось еще с одной проблемой. При валидации даты, использую zend_validate, валидатор Date. Указываю формат d.m.yyyy. Оно-то валидирует, но как выяснилось не все...если ввести, скажем 11.02.200f (вместо последнй цифры - букву) валидатор пропускает это дело...ошибки не выдает. Если не указывать формат, а использовать по-умолчанию, то все валидирует. Посмотрела исходники, при указании формата, валидатор использует Zend_Date::isDate. Это тоже какая-то особенность? Или все таки не валидирует?
Ответить
Комментарии временно отключены, вы можете воспользоваться форумом.