2013-07-17 2 views
20

私はPostgresでDoctrine2を使用します。あるテーブルでは、birthdate:datecreated_at:datetimetzという2つの異なる日付タイプがあります。両方ともDateTimeオブジェクトになりますが、異なるtimezone_typeとなります。ここ たリストは以下のとおりです。DateTimeオブジェクトの異なるtimezone_types

created_atdatetimetz:

DateTime Object 
(
    [date] => 2013-04-18 11:54:34 
    [timezone_type] => 1 
    [timezone] => +02:00 
) 

birthdate日:

DateTime Object 
(
    [date] => 1970-01-01 00:00:00 
    [timezone_type] => 3 
    [timezone] => Europe/Berlin 
) 

私は同じように私のオブジェクトをフォーマットする必要があります。どちらもtimezone_type=3である必要があります。

どうすれば実現できますか?

+1

'date_timezone_set(DateTime $ object、DateTimeZone $ timezone)' – DevZer0

+0

あなたが提案したコードは、タイムゾーンのみを設定します。上記のリストでは、タイムゾーンは同じですが、それらは異なって表示されています。 – lilly

+0

'$ mytime-> setTimezone(new DateTimezone( 'Europe/Berlin'))'(または何でも)をそれぞれに使用すると、結果は同じ方法で表示されます。 – Jerry

答えて

47

タイムゾーンは、DateTimeオブジェクトに3つの異なるタイプのいずれかとすることができる。

  • タイプ1。 new DateTime("17 July 2013 -0300");のようなUTCオフセット
  • タイプ2;タイムゾーン識別子、例えばnew DateTime("17 July 2013", new DateTimeZone("Europe/London"));

のみ日時が正しくDSTを可能にする取り付け型3タイムゾーンを持つオブジェクトのように:そのような​​

  • タイプ3のように時間帯省略形、。

    常にタイプ3を使用するには、受け入れられた識別子としてthis listからデータベースにタイムゾーンを格納し、それをインスタンシエーション時にDateTimeオブジェクトに適用する必要があります。

  • +0

    まあ。 私はこのタイプ3のタイムゾーンをデータベースに保存します。問題と思われるのは、Doctrine2が\ DateTimeZone( "Europe/London")としてタイムゾーンを明示的に渡した後であっても、それらのdifferetタイムゾーンタイプを返すということです。 Doctrine2の動作を変更するのに簡単にアクセスできないと思いますので、消費者クラスで単純なタイムスタンプを使用して日時フォーマットを行うことにしました。 または、私は何か気づかずに残してしまったでしょうか? Doctrine2 + PostgresのDateTimeオブジェクトを編集して動作させたことがありますか? – lilly

    +0

    申し訳ありませんが、Doctrineを使用したことはありません。私はORMのファンではありませんが、[Doctrine DBAL](http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest /index.html)、私は自分のデータを制御し、そのデータがどのように操作されるのか、あなたの問題に遭遇することはありません。 – vascowhite

    +0

    別のORMで同じ問題が発生していることがわかりました。その '$ new = new DateTime(); $ new-> setTimestamp($ old-> getTimestamp()); 'このトリックは非常に醜いですが。セッターにこれを含めると、痛みが緩和されます。 –