「EST」のようなタイムゾーンの略語を指定すると、 を使用して「アメリカ/ニューヨーク」を取得できますtimezone_name_from_abbr
。「東部標準時」のようなものを返す関数はありますか?
3 に答える
一般に、この関数は、一致する略語で見つかった最初のtimezone_name_from_abbr
エントリのみを返すため、この関数を信頼するべきではありません。タイム ゾーンの略語は一意ではありません。たとえば、略語「CST」を共有する 5 つの異なるタイム ゾーンがあります。あいまいさのさらに多くの例については、ウィキペディアのこの略語のリストを参照してください。
PHP の特定のケースとして、略語「IST」を考えてみましょう。インド標準時を表すtimezone_name_from_abbr("IST")
が返されることを期待するかもしれません。"Asia/Kolkata"
ただし、実際には"Asia/Jerusalem"
、イスラエル標準時を表す が返されます。どちらのタイム ゾーンも IST の略語を使用しますが、"Asia/Jerusalem"
アルファベット順で最初になります。
これを念頭に置いて、関数が "EST" だけを指定して "Eastern Standard Time" を返すことが実用的でない理由を理解してください。EST では可能かもしれませんが、すべての場合に機能するとは限りません。また、「東部標準時」は英語であり、さまざまな言語の他の略語やテキストによる説明があることも考慮してください。
あなたが話している情報を含む、Unicode からのもので、Common Locale Data Repository (または CLDR) と呼ばれるプロジェクトがあります。"America/New_York"
CLDR データを使用すると、 などのタイム ゾーン識別子と などの言語/ロケール コードを受け入れる関数を作成し"en-US"
、略語「ET」、「EST」、「EDT」、および名前を返すことができます。東部標準時」、「東部標準時」、および「東部夏時間」。次に、文脈および/または話している特定の時間に基づいて、使用する名前と略語を決定する必要があります。
TimeZoneNamesと呼ばれる .NET 用のライブラリを作成しました。PHPにも同様のものが必要です。PHP に推奨する具体的な方法はわかりませんが、誰かが作成したか、CLDR ソース データを直接使用して必要な関数を作成できる可能性があります。
これは私がしばらくの間追い求めていたものであり、他の誰かが同じ機能を探しているのを見て、最後のプッシュが必要でした:)
webbit4me/timezoneは、指定されたタイムゾーンの名前、場所、またはオフセットを取得するのに役立つ PHP ツールです。
このツールは、同様の略語を持つタイムゾーンの回避策も提供します。
つまり、Matt のIST の例では、3 つの異なるタイムゾーンがあります。
- インド標準時 (UTC +5:30)
- アイルランド標準時 (UTC +1:00)
- イスラエル標準時 (UTC +2:00)
デフォルトの IST オブジェクトは最初に出現したものを参照し、その後さらに 2 つのオブジェクト IST100 と IST200 を作成してアイルランドとイスラエルの標準時を指定します。100と200 の接尾辞はタイムゾーンのオフセットから来ていることに注意してください。たとえば、UTC + 1 : 30は 130 になります。
このパッケージがお役に立てば幸いです。http: //github.com/webit4me/timezoneに必要な場合は、自由にタグ付けして調整に貢献してください。