新しいDateTime( '2009-09-30 12:00:00 + 0400');
異なるタイムゾーンにある2つの日付がある場合、ある日付の時刻を別の日付のタイムゾーンで見ると便利な場合があります。 両方の日付が上記の方法で初期化された場合(つまり、名前のないタイムゾーンを使用する場合)、「 現在IDを持つゾーンに対してのみこれを実行できます」というエラーが発生します。
それを回避するには、DateTimeの子孫を作成します
クラスCustomDateTimeはDateTimeを拡張します{ パブリック関数setTimezone($ dtz){ if(!preg_match( '/ ^ [0-9 \ + \-] /'、$ dtz-> getName())){ 親を返す:: setTimezone($ dtz); } $ offset = $ dtz-> getOffset($ this)-$ this-> getTimezone()-> getOffset($ this); $ this-> modify($ offset。 'second'); $ format = $ this-> format( 'Ymd H:i:s') $ dtz-> getName(); $ this-> __ construct($ format); } }
喜んで使用します:
パブリック関数testApplyUnnamedTimezoneToOtherDateTime(){ $ dt1 =新しいCustomDateTime( '2009-09-30T12:00:00-02:00'); $ dt2 =新しいCustomDateTime( '2009-09-30T12:00:00 + 02:00'); $ dt2-> setTimezone($ dt1-> getTimezone()); $ this-> assertEquals( '2009-09-30T08:00:00-02:00'、$ dt2-> format( 'c')); }