MySql で Propel 1.6 を使用しています。次のように、すべてのテーブルでタイムスタンプ可能な動作を設定しました。
<database name="default" >
<behavior name="timestampable">
<parameter name="create_column" value="creation_date" />
<parameter name="update_column" value="last_modified" />
</behavior>
<table name="book" phpName="Book">
<!-- table colums omitted -->
</table>
</database>
Propel のタイムスタンプ可能な動作のドキュメントによると、タイムゾーンを指定するパラメーターはありません。
タイムスタンプ可能な動作では、デフォルトで UTC 時刻が設定されていないことに気付きました。たとえば、私の場合、UTC + 1 を設定します。
少し調べてみると、preInsert()
フックを使用して動作の代わりに時間を設定し、Unix タイムスタンプを渡すと次のようになります。
public function preInsert(PropelPDO $con = null)
{
$this->setCreationDate(time());
return true;
}
結果の時間はまだ UTC+1 です。DateTime
Unix タイムスタンプの代わりにオブジェクトを使用して時刻を設定した場合:
public function preInsert(PropelPDO $con = null)
{
$this->setCreationDate(new DateTime('now', new DateTimeZone('UTC')));
return true;
}
データベースで正しい UTC 時刻を取得します。
コードをチェックインしたところ、バハビアが Unix タイムスタンプを通過する時刻を設定しているため、データベースで UTC+1 が発生することがわかりました。
私の質問は次のとおりです。
- Propel のタイムスタンプ可能な動作を UTC で設定することは可能ですか?
- そうでない場合、Propel はどこで日付形式/タイムゾーンを設定しますか? フックを使用し、タイム ゾーンを指定し
pre
てオブジェクトを渡すことDateTime
は、データベースで UTC 時刻を取得する唯一の方法ですか (カスタム動作を実装する以外に)? - また、Propel のタイムスタンプ可能な動作のタイムゾーンを設定できない場合、そもそもその全体的な目的は何ですか? (データベースに UTC タイムスタンプを設定するのはかなり一般的な方法です)