最近、JavaScript に新しい拡張機能があることを発見しました。これにより、および関数のDate
オブジェクトにいくつかの機能が追加されます。 ここを参照してください。toLocaleString
toLocaleDateString
toLocaleTimeString
やなどのIANA/Olson タイム ゾーンtimeZone
をサポートするオプションに特に興味があります。 これは現在、Google Chrome でのみサポートされています。America/New_York
Europe/London
以前のアドバイスでは、JavaScript で UTC 以外のタイム ゾーンまたは独自のローカル タイム ゾーンを使用するには、ライブラリを使用する必要があるというものでした。しかし今では、これがブラウザに直接組み込まれ始めているようです。だから今、あなたはこれを行うことができます:
new Date().toLocaleString("en-US", {timeZone: "America/New_York"})
// output: "7/4/2013 5:15:45 PM"
または:
new Date().toLocaleString("en-NZ", {timeZone: "Pacific/Chatham",
timeZoneName: "long"})
// output: "7/5/2013 9:59:52 AM GMT+12:45"
または:
new Date().toLocaleString("en-GB", {timeZone: "Europe/London",
timeZoneName: "short"})
// output: "4/7/2013 22:18:57 United Kingdom Time"
// (strange time zone name, but ok)
これは非常にクールですが、いくつか質問があります。
- これは新しい規格の一部ですか? ECMAScript 6 のどこかに埋もれているのではないでしょうか? それともChromeのカスタムですか?
- なぜGoogle Chromeだけ?他の場所でサポートされていますか? 他の場所でサポートする予定はありますか?
- Chrome の JavaScript ランタイムを使用する node.js を確認しましたが、動作しません。なぜだめですか?
- リストした機能以外の方法でタイム ゾーン データにアクセスできますか? 文字列をフォーマットするときにのみ使用できる場合、結果に基づいて計算を行うのは難しい場合があります。
これは出力に焦点を当てていますが、入力にはどのように使用しますか? コンストラクターのタイムゾーンを
Date
オブジェクトに渡す方法はありますか? 私は次のことを試しました:// parsing it with a date and time new Date("2013-01-01 12:34:56 America/New_York") // passing it as a named option new Date(2013,0,1,12,34,56,{timeZone:"America/New_York"})
どちらも機能しませんでした。仕様書には何も載っていなかったので、これは(まだ)存在しないと思いますが、間違っていたら教えてください。
ECMAScript 5 仕様の欠陥によって作成されたこの投稿で説明されている問題は、正しいデータが TZDB にある場合でも、依然として出力に影響を与えます。古い実装と新しい実装が共存しているのはなぜですか? それはすべて古い方法か、またはすべて新しい方法であると考える人もいるでしょう。たとえば、コンピューターのタイム ゾーンが米国東部時間に設定されている場合:
new Date(2004,10,7,0,0).toLocaleString("en-US",{timeZone:"America/New_York"})
戻ります
"11/6/2004 11:00:00 PM"
。真夜中に開始し、ローカル タイム ゾーンが出力タイム ゾーンと一致するため、真夜中に返されるはずです。ただし、ES5 の問題により、提供された入力日付が間違った UTC ポイントに配置されます。IANA が TZDB の更新をリリースすると、Google が変更を含む Chrome の更新をプッシュすることを期待できますか?