DateTimeオブジェクトを作成するとき、時間帯(GMTからの時間と分でのシフト)を時間の行で指定できます。たとえば、
新しい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'));
}