2009-04-13 9 views
4

PHPは、GMTオフセットではなくリージョン名を使用して、evnironmentのタイムゾーンを設定するのに面倒な方法を使用しているようです。これは、可能なすべてのPHPタイムゾーン値に対応するために巨大でなければならないか、またはGMTオフセットを有効な値に変換してPHPに渡す方法を見つけなければならないため、タイムゾーンのドロップダウンが大きな痛みを引き起こします。PHPのタイムゾーン

GMTオフセットを指定すると、PHPでタイムゾーンをどのように設定できますか?たとえば、「-8.0」のGMTオフセット値をdate_timezone_set()に渡すことができる値に変換するにはどうすればよいですか?

答えて

17

地域名を使用すると、タイムゾーンを記述する方法です。 GMTオフセットを単独で使用することは、あまりにも曖昧です。

これはあなたの質問に反映されています - どのように-8のGMTオフセットをタイムゾーンに変換する必要がありますか?まあ、それは「GMT-8」が本当に何を意味しているかにかかっています。 「UTC-8はすべての時点で」を意味するのか、「冬の間はUTC-8、夏の時間はUTC-7」を意味するのでしょうか?後者の場合は、いつ冬が始まり、終わりますか?

希望 PHPは「固定」(DSTなし)タイムゾーンの値のよく知られた値を受け入れました。 "Etc/GMT + 3"など。しかし、あなたが実際には固定時間帯を意味するのでなければ、あなたが実際に話している地域を見つけ出すほうがよいでしょう。そうでなければあなたの計算はある時点で間違っている。

私は昨年のほとんどの時間帯と戦ってきました。彼らは痛みを感じています - 特にいくつかのゾーンではDSTのルールが変更されています(米国のように数年前に行われました)。このすべてを単一の数字に反映しようとするのは愚かです。 1つの瞬間だけに興味があるのであれば大丈夫かもしれませんが、その時点でUTCの値を最初に保存することもできます。それ以外の場合は、名前が最善の方法です。 (その時点では必ずしも平原を航行しているわけではありません。名前も変わってきます...)

+0

地域の計時慣行が常に変化している場合 – Calvin

+0

私はそれらがPHPアップデートで来ると想像します。 PHPのパッチを当てていますか? :-) – ceejayoz

+1

彼らはまだPHP3用のパッチをリリースしていますか? = P – Calvin

1

さまざまな場所の夏時間データでデータベースを管理する必要があります。そのため、場所。

5

PHP> = 5.2を使用している場合は、組み込みのDateTimeZoneクラスメソッドlistAbbreviationsを使用できます。

var_dump(DateTimeZone::listAbbreviations()); 
1
あなたはまた、異なるタイムゾーンおよびフォーマットの日時を扱うためのPHPライブラリ Daterを使用しようとすることができ

- どのようにPHPが一つの領域から別の(例えばDateTimeZoneを::のgetOffsetと同様に)変換を知っているんhttps://github.com/barbushin/dater

関連する問題