2017-06-07 11 views
4

タイムゾーンとロケールで日付と時刻を変換しようとしていますが、IE11では動作しません。それはクロム、ファイアフォックス、エッジで働いています。date.toLocaleDateString(ロケール、{timeZone: 'Asia/Kolkata'})が動作しません。11

最小限に完全な検証例:IE11で

function getLocalTime(date){ 
    var timeZone = "Asia/Kolkata"; 
    var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds())); 
    var dateAndTime = utcDate.toLocaleDateString("en",{timeZone:timeZone})+" "+ utcDate.toLocaleTimeString("en",{timeZone:timeZone}).replace(/:\d+ /, ' ');; 
    return dateAndTime; 
} 

console.log(getLocalTime(Date()); 

エラー:

SCRIPT5118: Option value 'ASIA/KOLKATA' for 'timeZone' is outside of valid range. Expected: ['UTC']

注:私は第三者のJSを使用したくありません。

+0

タイムゾーンまたはタイムゾーンのみですか?あなたが「働いていない」と言うとき、それは何をしていますか? F12を押すと、コンソールには何が入っていますか? – mkaatman

+0

** 'timeZone'のオプション値 'ASIA/KOLKATA'が有効範囲外です。期待される:['UTC'] '**しかし、私は日時をアジア/コルカタ(ユーザー設定)のようなタイムゾーンで欲しい – Arat

+0

timezonestrの値は何ですか? – mkaatman

答えて

3

timeZone documentation on MDNは、タイムゾーン文字列のサポートは、「UTC」を除き、オプションであることを言う:

実装が認識しなければならない唯一の値が「UTC」です。デフォルトはランタイムのデフォルトのタイムゾーンです。インプリメンテーションは、「アジア/上海」、「アジア/コルカタ」、「アメリカ/ニューヨーク」などのIANAタイムゾーンデータベースのタイムゾーン名も認識することがあります。 ECMAScript spec確認この(@mkaatmanに帽子先端)の

関連部分:

[タイムゾーン]]文字列値 "UTC" または未定義のいずれかです。

適合する実装では、[... t]に対してDateTimeFormatコンストラクターのoptionプロパティtimeZoneに対してRangeErrorをスローするのではなく、実装定義の動作を許可することができます。 IANAタイムゾーンデータベースのゾーン識別子またはリンク識別子の大文字と小文字を区別しない一致であり、DateTimeFormat.resolvedOptionsによって返されるオブジェクトのtimeZoneプロパティのためにデータベースで使用されるケーシング内のゾーン識別子に正規化されます( "Etc/GMT" 「UTC」に正規化される。彼らはIE11でlocaleDateStringをサポートし始め

Microsoft's documentation状態:Internet Explorerの11以降

、toLocaleDateStringはロケールとオプションパラメータのサポートを追加する日付をフォーマットするために内部的にIntl.DateTimeFormatを使用しています。

...あなたのエラーメッセージに基づいて、サポートは最小限の「 'UTC'または未定義」バージョンです。タイムゾーンデータベースはhereですが、これを処理する別の方法を見つける必要があるようです(名前のタイムゾーンではなくgetTimezoneOffset()が含まれている可能性があります)。

関連する問題