Насколько я понимаю, лучший способ работы с датами в Zend Framework - это выбрать их в качестве метки времени Unix из базы данных.
Быстрое создание дат из значений даты базы данных
// SELECT UNIX_TIMESTAMP(my_datetime_column) FROM my_table
$date = new Zend_Date($unixtimestamp, Zend_Date::TIMESTAMP);
Мне кажется, это боль в том, что в Oracle нет простого способа выбрать даты как метки времени Unix или в формате ISO-8601 - это два формата, которые Zend_Date
знает лучше.
Но я написал функцию для выбора дат в качестве меток времени Unix в PL / SQL, так что теперь я могу это сделать.
Используя Zend_Db_Expr
, я теперь могу выбирать свои даты как метки времени Unix:
$select = $db->select()
->from(array('p' => 'products'),
array(
'product_id',
'product_date' => new Zend_Db_Expr('toUnixTimestamp(product_date)')
)
);
$results = $db->fetchAll($select);
Вы бы использовали аналогичный запрос для любой RDMS - большинство имеют функцию отметки времени.
Я нахожу это раздражающим, потому что теперь я должен циклически просматривать $ results, чтобы вручную преобразовать метку времени в объект Zend_Date:
foreach($results as $result){
$productDate = new Zend_Date($result['product_date'], Zend_Date::TIMESTAMP);
echo $productDate->toString('dd/MMM/yyyy HH:mm:ss');
}
Я хочу, чтобы моя Модель возвращала $ результаты, где временные метки уже преобразованы в Zend_Date. Я не хочу писать цикл в каждой функции доступа к данным, чтобы сделать это для меня.
Итак, чтобы перейти к сути моего настоящего вопроса:
Кто-нибудь знает, как с Zend_Db настроить некоторую постобработку на наборе результатов, тем самым автоматически преобразовав метки времени в объекты Zend_Date?