3

私の理解では、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

しかし、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 オブジェクトに自動的に変換する方法を知っている人はいますか?

4

2 に答える 2

0

Zend_Table を使用して、テーブルが拡張するZend_Db_Table_Row_Abstractカスタム行オブジェクトを返すようにします。次に、その行に次のようなメソッドを用意します

function getDate() {
    return new Zend_Date($this->datecol, Zend_Date::TIMESTAMP);
}
于 2009-10-30T04:45:29.793 に答える