Автоопределение и подсказка при изменении часового пояса устройства в angular7 - PullRequest
0 голосов
/ 25 февраля 2019

enter image description here В моем профиле сохранен часовой пояс как "Америка / Нью-Йорк".Когда мое устройство перемещается в «Дубай», часовой пояс устройства изменяется, а часовой пояс профиля остается «Америка / Нью-Йорк».

(1) Как автоматически определить и сообщить пользователю, что часовой пояс его устройства изменился и отличается от профиля / сохраненного часового пояса?Пользователь получает доступ к приложению через такие каналы, как web, android и ios device.

(2) Как получить список доступных часовых поясов, чтобы при появлении запроса на изменение часового пояса он мог вручную обновить часовой пояс профиля так же, как устройствочасовой пояс.Этот список часовых поясов должен быть одинаковым для всех устройств, таких как web, android и ios device.

Проблема здесь в том, что некоторые часовые пояса возвращают "Азия / Калькутта" и "Азия / Калькутта".Так как синхронизировать все устройства относительно часового пояса.Как получить список доступных часовых поясов, одинаковых для всех устройств.

Ответы [ 2 ]

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

Как автоматически определить и сообщить пользователю, что часовой пояс его устройства изменился и отличается от профиля / сохраненного часового пояса?

Обнаружение часового пояса охватывается этим ответом ,Существует несколько подходов, но в конечном итоге вы хотите получить идентификатор часового пояса IANA (например, America/New_York) для сравнения с сохраненным значением в профиле пользователя.

Как получить список доступных часовых поясов...

В JavaScript нет встроенного метода для этого, но вы можете использовать библиотеку.Например, Момент-часовой пояс обеспечивает функцию moment.tz.names(), а Date-fns-timezone обеспечивает функцию listTimeZones().

...Этот список часовых поясов должен быть одинаковым для всех устройств, таких как web, android и ios.

Хотя большинство сред используют идентификаторы часовых поясов IANA , нет гарантии, что все устройства будут иметьполностью обновленные данные.Скажем, введен новый часовой пояс, и ваши устройства обнаруживают его - если на вашей серверной платформе нет последних данных о часовом поясе, вы можете столкнуться с ошибкой.Лучшее, что вы можете сделать здесь, - это регулярно проверять наличие обновлений, которые зависят от платформы.

... некоторые часовые пояса возвращают "Азия / Калькутта" и "Азия / Калькутта"

Хорошо.Asia/Kolkata является предпочтительной канонической зоной, а Asia/Calcutta является ссылкой (или псевдонимом) этой зоны.Все современные платформы должны быть в состоянии интерпретировать либо.Если вы пытаетесь сделать это самостоятельно, перед сравнением вам нужно обязательно разрешить ссылки на их канонические зоны.Есть библиотеки, которые могут сделать это за вас.

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

Частота проверки должна основываться на вашем собственном анализе: если часовой пояс должен автоматически обновляться (или пользователю нужно почти сразу же запросить обновить свой часовой пояс), лучше всего использовать setInterval, который выполняет проверку каждую минуту.option.

Я думаю, что лучше всего использовать параметр времени вместо совпадающей строки, например, смещение, выраженное в минутах, если сравнивать с UTC.На самом деле, JavaScript полезен с довольно полезным методом, помещенным в объект DateTime:

setInterval(() => {
    let dt = new Date();

    if(dt.getTimezoneOffset() !== localStorage.get('tzOffset') {
        // redirect to a proper component or automatically update the tz
    }
}, 60000);

Я предполагаю, что вы храните текущий часовой пояс в локальном хранилище по ключу 'tzOffset'.getTimezoneOffset возвращает разницу в минутах между временем UTC и местным временем, в соответствии с MDN

Что касается другого вопроса, использование часовых поясов может очень помочьполучить правильно отформатированный выбор на разных устройствах:

for(let tz of moment.tz.names()) {
    // do your stuff wuth the timezone name
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...