web-dev-qa-db-ja.com

PHP date_default_timezone_set()東部標準時(EST)

短編小説

PHP5が東部夏時間ではなく東部標準時として認識する公式の非推奨のタイムゾーンはありますか?

短編小説:-P

うわー、私はPHPがそのようなクラスターフローゲンを時間の設定から外すとは信じられません。

PHP5のdate_default_timezone_set()を使用して、スクリプトのタイムゾーンを設定したいと思います。 標準時間を使いたい。私はスクリプトに夏時間を監視させたくない。 gmtime()を使用して、プログラムが時間を書き込むたびに60 * 60 * 5秒を引く必要はありません。その値を変数に保存したくありません。デフォルトのタイムゾーンを設定すると、より洗練され、スクリプトが他のサーバーやロケールに移植しやすくなります。

残念ながらPHPは、デフォルトのタイムゾーンを設定するときに、彼らの愚かな「公式タイムゾーン」の1つを使用する必要があります。「America/New_York」がありますが、それまたは公式のいずれかがわかりません= PHPタイムゾーンは夏時間を監視します。実験を通じて、「America/New_York」はDSTを監視することを発見しました。「America/Panama」はESTであるため、DSTを監視しません...しかし、パナマが将来、DSTについて考えを変える必要がありますか?(1908年にDSTを観察しました)

パナマはいつでも考えを変えることができるからです。 GMTまたはUTCオフセットを使用したいだけです。

それからこれがあります...

http://us.php.net/manual/en/timezones.others.php

上記のリンクリストは、非推奨のタイムゾーンであると私が想定しているものです。 「EST」はそこにありますが、非常に米国中心なので、なぜ非推奨になるのか理解しています。 「Ect/GMT-5」もありますが、なぜそれが非推奨になるのかまったくわかりません。あなたが私に尋ねるなら、すべての地名のタイムゾーンは非推奨にされるべきであり、GMTのタイムゾーンは非推奨にされるべきではありません...しかしこれを入手してください...「Ect/GMT-5」は実際には間違っています!米国の東部標準時を取得するには、「Ect/GMT +5」を使用する必要がありました。私はここ東海岸でイングランドより5時間進んでいないと確信しています。

答えましたか?

誰もその質問に本当に答えませんでした。だから私は自分で答えると思います。 「いいえ、PHP5が東部標準時で認識する非推奨のタイムゾーンはありません」

多くの人が、日付をUTC時間として保存し、ストレージから引き出すときに現地時間に変換する必要があると私に言いました。これは私がすでに知っていることです。問題は、私はスクリプトのこの小さな部分だけを修正するために雇われたので、彼がPHPおそらく。

私はしぶしぶ、時間を正しく保存して取得する方法を教えてくれる男にクレジットを与えます。そうすれば、これを探している将来の人々はこれを正しい方法で行う方法を学ぶことができます。

13
mrbinky3000

あなたがやりたいことは実用的ではなく、ユーザーがあなたを嫌うことになります。

名前付きタイムゾーンの背後にある全体的な理由は、現地時間を正確に表すためです。そのローカルエリアがDST内にある場合、「標準」時間を現地時間として表すことは客観的に正しくありません。そのタイムゾーン内で時間を読み取る人は、誤った情報を受け取ることになります。

タイムゾーンを無視する日付と時刻を保存して操作する必要がある場合は、その目的でUTCを使用します。つまり、ストレージと通常の計算です。古き良きUnixタイムスタンプでさえ、「1970年1月1日の真夜中過ぎの秒数[〜#〜] utc [〜#〜] "であることを覚えておく価値があります。

ユーザーにとってローカルな時間を表す必要がある場合は、ユーザーがローカルタイムゾーンを選択できるようにして、それを変換する必要があります表示中。最新のPHPのDateTimeとDateTimeZoneは、これをdead-simpleにします。インタラクティブプロンプトから:

_php > $utc = new DateTimeZone('UTC');
php > $amla = new DateTimeZone('America/Los_Angeles');
php >
php > $two_past_midnight = new DateTime('2011-04-05 00:02', $utc);
php > $two_past_midnight->setTimeZone($amla);
php > echo $two_past_midnight->format('Y-m-d H:i:s');
2011-04-04 17:02:00
_

混乱も大騒ぎもありません。タイムゾーンを切り替えたときに、計算が処理されました。


別の方法として、本当に、本当に、really DSTタイムゾーンをフラットにしたい場合は、 getTransitions および getOffset と組み合わせて さまざまなタイムゾーンdate()形式 、特にI。結果の情報を調べて、DSTゾーンの「標準」バージョンが次に移行するタイミングを見つけ、それに応じて調整することができます。異なる領域は異なる時間に遷移し、すべての領域が同じ量だけ遷移するわけではないことを覚えておいてください...そしていくつかはまったく遷移しません。 誰かがインディアナについて言及したと思います すでに。

通常、ここにサンプルコードも提供しますが、日付の計算は、暴力に対する飽くなき渇望で私を満たします。 60、60、24、7、4-6、12、52が時間と日付について考えるのに受け入れられる方法であると決定した人は誰でも、邪悪な人々でした。ありがたいことに、彼らはすべて数百年から数千年の間死んでいます。

19
Charles

America/New_YorkはDSTを遵守し、推奨されるタイムゾーンです。 (私は昨年、多くの日付/時刻コードを書いた Derick Rethans が話した会議に行きました。)地域のタイムゾーンの背後にある考え方は、都市のタイムゾーン規則に従うということです/それらが示す地域(7つのインディアナタイムゾーンのようなものがある理由です)。

1
Jimmy Sawczuk
echo ' Format ' . date('m/d/Y H:i:s a') ;
<br/>//maketime function- mktime(hour,minute,second,month,day,year,is_dst)
<br/>$EasternTimeStamp =mktime(date('H')-6,date('i'),date('s'),date("m"),date("d"),date("Y"));
<br/>// date function- date(format, timestamp)
<br/>echo 'Format ' . date('m/d/Y H:i:s a',$EasternTimeStamp) ;
1
steve

time()が返すUT​​Cを使用して時間を常に保存し、サーバーの場所に基づいてタイムゾーンを設定する必要があります。サーバーの場所は、該当する場合はDST用に更新されます。

0
Adam Hopkinson

UTC日付の前後X時間が本当に必要な場合は、次のようにします。

$now = gmdate('Y-m-d H:i:s', time() - 3600 * $hours);

あなたの場合、$hoursは5になると思います。

他の人が示唆しているように、私も含めて、これは良い習慣ではありません...しかし、あなたはそれを知っています。

0
Matthew