IE 11 выбрасывает «timeZone вне допустимого диапазона» при установке часового пояса на «Europe / London» - PullRequest
0 голосов
/ 25 января 2019

У меня есть несколько 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 (вздох ...), который выдает следующую ошибку:

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

У кого-нибудь есть предложения?См. http://jsbin.com/dawaqocuvi/1/edit?html,js,console,output для примера скрипта, который поддерживает IE.

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Да, как указано выше, IE 11 поддерживает большую часть API-интерфейса Intl, но не поддерживает использование определенной временной зоны: http://kangax.github.io/compat-table/esintl/#test-DateTimeFormat_accepts_IANA_timezone_names

Вот пример того, как можно заполнить только Intl.DateTimeFormatФункция timeZone поддерживает использование веб-пакета require.ensure:

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');
    }
});

. Это должно загружать полифилл только для браузеров, которые не поддерживают указание свойства timeZone, которое на данный момент должно быть только IE 11.

0 голосов
/ 25 января 2019

IE11, имеет ограниченную поддержку форматирования даты при использовании опции часового пояса, в основном единственная допустимая опция - UTC.Не очень полезный.

Два варианта, которые я могу придумать.

  1. Используйте моментальные моменты, это хорошая библиотека времени и даты, но она может быть излишней
  2. Использовать pollyfill

Ниже приведен фрагмент кода, который заполняет локальный часовой пояс, и создает простые мировые часы с несколькими зонами.

Если вы используете современный браузер, вам следуетв состоянии удалить тег сценария при запуске, и он продолжит работать.

Обновление: теперь это работает в IE11, важен регистр при выполнении локали с полифилом.например.Europe/Amsterdam хорошо, но europe/amsterdam нет, с Chrome это не имеет значения.

//var d = new Date(); var dUK = d.toLocaleString('en-GB', { timeZone: 'America/Chicago' }); console.log(dUK);

function updateTimes() {
  var dt = new Date();
  var els = document.querySelectorAll("[data-tz]");
  for (var l = 0; l < els.length; l ++) {
    var d = els[l];
    d.innerText = dt.toLocaleString('en-GB', {timeZone: d.dataset.tz});
  }
}

updateTimes();
setInterval(updateTimes, 1000);
<script src="https://unpkg.com/date-time-format-timezone@latest/build/browserified/date-time-format-timezone-complete-min.js"></script>

<p>Simple world time clocks</p>

<div><span data-tz="Europe/London"></span>
  - London
</div>
<div>
  <span data-tz="Europe/Amsterdam"></span>
  - Amsterdam
</div>
<div>
  <span data-tz="America/Chicago"></span>
  - Chicago
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...