据我了解,在 Zend 框架中处理日期的最佳方法是从数据库中选择它们作为 Unix 时间戳。
// SELECT UNIX_TIMESTAMP(my_datetime_column) FROM my_table
$date = new Zend_Date($unixtimestamp, Zend_Date::TIMESTAMP);
我认为在 Oracle 中实际上没有简单的方法来选择日期作为 Unix 时间戳或 ISO-8601 格式,这很痛苦——这两种格式Zend_Date
最了解。
但是我确实编写了一个函数来选择日期作为 PL/SQL 中的 unix 时间戳,所以我现在可以实际执行此操作。
使用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 的 $results。我不想在每个数据访问函数中编写一个循环来为我执行此操作。
所以要解决我的实际问题:
有谁知道 Zend_Db 的一种方法,可以在结果集上设置某种后处理,从而自动将时间戳转换为 Zend_Date 对象?