サーバー環境
Redhat Enterprise Linux
PHP 5.3.5
問題
2011-04-27 02:45のようなUTC日付と時刻があり、それを現地時間(America/New_York)に変換したいとします。
つの質問:
1.)以下の私のコードで問題が解決する可能性がありますが、同意しますか?
<?php
date_default_timezone_set('America/New_York'); // Set timezone.
$utc_ts = strtotime("2011-04-27 02:45"); // UTC Unix timestamp.
// Timezone offset in seconds. The offset for timezones west of UTC is always negative,
// and for those east of UTC is always positive.
$offset = date("Z");
$local_ts = $utc_ts + $offset; // Local Unix timestamp. Add because $offset is negative.
$local_time = date("Y-m-d g:i A", $local_ts); // Local time as yyyy-mm-dd h:m am/pm.
echo $local_time; // 2011-04-26 10:45 PM
?>
2.)しかし、$ offsetの値は夏時間(DST)に合わせて自動的に調整されますか?
3。)そうでない場合、DSTを自動的に調整するためにコードをどのように調整すればよいですか?
ありがとうございました :-)
これは、PHPネイティブの DateTime および DateTimeZone クラスを使用して、必要なことを実行します。
$utc_date = DateTime::createFromFormat(
'Y-m-d G:i',
'2011-04-27 02:45',
new DateTimeZone('UTC')
);
$nyc_date = $utc_date;
$nyc_date->setTimeZone(new DateTimeZone('America/New_York'));
echo $nyc_date->format('Y-m-d g:i A'); // output: 2011-04-26 10:45 PM
詳細については、 DateTime :: createFromFormatのマニュアルページ を参照してください。
現在DSTを持っている/持っていないタイムゾーン間で実験を行ったところ、 DSTが考慮されることがわかりました。上記の私の方法を使用した同じ変換は、同じ結果時間をレンダリングします。
私はこれが古い投稿であることを知っていますが、正しい時間を取得するために追加する必要がある別の行があります。
現地時間に変換する前に、デフォルトのタイムゾーンを次のようにUTCに設定する必要があります(提供する時間のタイムゾーンの場合)。
function GmtTimeToLocalTime($time) {
date_default_timezone_set('UTC');
$new_date = new DateTime($time);
$new_date->setTimeZone(new DateTimeZone('America/New_York'));
return $new_date->format("Y-m-d h:i:s");
}
Hasin Hayderの答えを改善します
date_default_timezone_set('America/New_York'); // Set timezone.
$utc_ts = strtotime("2011-04-27 02:45 UTC"); // UTC Unix timestamp.
echo date('Y-m-d H:i:s a T', $utc_ts);
出力するはずです
2011-04-26 10:45:00 pm EDT
違いは、ソースのタイムゾーンを追加することです。 strtotime()はタイムゾーンも受け入れます。 :p
date_default_timezone_set('America/New_York'); // Set timezone.
$utc_ts = strtotime("2011-04-27 02:45"); // UTC Unix timestamp.
これを実行した直後、$ utc_tsには現地時間が含まれています。 PHPはDST自体を処理します。
= H =