web-dev-qa-db-ja.com

IE 11タイムゾーンを「Europe / London」に設定すると、「 'timeZone'は有効範囲外です」をスローする

イギリスのタイムゾーンで表示される現地時間を取得するためのjsがあります。

var d = new Date(); // local system time (whatever timezone that is)
var dUK = new Date(d.toLocaleString('en-GB', { timeZone: 'Europe/London' })); // UK timezone (covers BST too)

次のエラーをスローするIE 11(sigh ...)を除くすべてのブラウザで正常に動作します。

Option value 'EUROPE/LONDON' for 'timeZone' is outside of valid range. Expected: ['UTC']

誰か提案はありますか? IEをサポートするフィドルの例については、 http://jsbin.com/dawaqocuvi/1/edit?html,js,console,output を参照してください。

5
Sean T

はい、上記のとおり、IE 11はほとんどのIntl APIをサポートしていますが、特定のtimeZoneの使用をサポートしていません: http://kangax.github.io/compat- table/esintl /#test-DateTimeFormat_accepts_IANA_timezone_names

これは、webpackのrequire.ensureを使用して、Intl.DateTimeFormat関数のtimeZoneサポートだけをポリフィルする方法の例です。

const fillIntlDateTimeFormatTimezone = () => new Promise((resolve) => {
    try {
        new Intl.DateTimeFormat('en', {
            timeZone: 'America/Los_Angeles',
            timeZoneName: 'long'
        }).format();
        return resolve();
    } catch (error) {
        require.ensure(['date-time-format-timezone'], (require) => {
            require('date-time-format-timezone');
            return resolve();
        }, 'DateTimeFormatTimezone');
    }
});

これは、この時点でIE 11のみ)であるはずのtimeZoneプロパティの指定をサポートしていないブラウザに対してのみ、ポリフィルをロードする必要があります。

0
SunshinyDoyle