2017-10-18 7 views
0

私はmysqlデータベースに格納された日時フィールドを持っています。下の例では、この時間は09:00です。PHP setTimeZoneタイムゾーン変換の問題 - BST(GMT + 1)に起因する特殊性

私はこの時間を西海岸と東海岸USAのタイムゾーンでも表示しようとしています。私は私が正しくPHPのDateTime「はsetTimeZone」関数を使用しています信じて

- しかし、結果が戻ってくるには時間あるうちの両方のタイムゾーンのための

$online->getTimeByZone('America/Los_Angeles'); // Returns 02:00 
$online->getTimeByZone('America/New_York'); // Returns 05:00 


public function getTimeByZone($timezone = 'Europe/London') { 

    $date = $this->getDateField('start_time', 'Y-m-d H:i:s'); // 2017-10-30 09:00:00 

    $datetime = new DateTime($date, new DateTimeZone('Europe/London')); 
    $datetime->setTimeZone(new dateTimeZone($timezone)); 

    return $datetime->format('H:i'); 

} 

私はこれがあることを行っている時間差から想定しています英国に関連した夏時間の観測に関連していますが、これを考慮するには、「Europe/London」でDateTimeオブジェクトを開始するときに期待していました。

アイデア?

+0

ここで、時間帯が必要なのはいつですか? –

+0

@Hackitデータベースは 'Europe/London'時間に値を格納しています。私はアメリカ東海岸( 'アメリカ/ニューヨーク')とアメリカ西海岸( 'アメリカ/ロサンゼルス')時代に変換して出力しようとしています。 これは機能していますが、午前2時と午前1時には午前1時と午前4時に間違って表示されます。 – steve

+1

実際、2017年10月30日にロンドンはDST(10月29日に終了する)](https://www.timeanddate.com/time/zone/uk/london?year=2017)にはないが、[New York](https://www.timeanddate.com/time/zone/usa/new-york?year=2017)と[Los Angeles](https://www.timeanddate.com/time/zone/usa/los -angeles?year = 2017)はDSTになります(11月の両方で)。だから、10月30日、ロンドンの午前9時はロサンゼルスで午前2時、ニューヨークで午前5時(すべてのDST規則のため)です:https://www.worldtimebuddy.com/?qm=1&lid=2643743、 5128581,5368361&h = 2643743&date = 2017-10-30&sln = 9-10 –

答えて

3

北米でも「夏時間」が見られるが、英国では「夏時間」は観測されていない場合、小さなウィンドウで発生するサンプル日付が選択されています。イギリスの時計は10月の最後の日曜日に変更されます11月の第1日曜日に米国とカナダの時計を使用しています。この重複の週の間に

は、アメリカ/ニューヨーク時間はUTC-4(「東部夏時間」)で、ヨーロッパ/ロンドン時間はUTC + 0(「グリニッジ標準時」)です。したがって、「2017-10-30 09:00:00ヨーロッパ/ロンドン」は実際には「2017-10-30 05:00:00 America/New_York」です。

1週間前の日付を選択すると、オフセットはUTC-4とUTC + 1( "British Summer Time")になります。 1週間後、UTC-5(「東部標準時」)およびUTC + 0となります。したがって、年間のほとんどの場合、期待される差異が5時間になることは間違いありません。

北米は以前にそのクロックを変更する月内の別の2週間は、ありますので、再び5

の代わりにオフセット4時間があるでしょう(もちろん、同じことが、アメリカ/ Los_Angelesタイムゾーンに適用されますこの3週間で7時間ではなく6時間になります)。

関連する問題