Содержит ли getTimezoneOffset () информацию о переходе на летнее время и как получить эти оба значения? - PullRequest
0 голосов
/ 18 ноября 2018

Дата хранится на сервере в GMT + 0 без перехода на летнее время.

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

const currentTime = new Date();
this.timezoneOffset = currentTime.getTimezoneOffset();

Затем мы можем проверить, есть ли клиент в области DLS, например, с помощью momentjs:

 const isDaylightSavingTime = moment().isDST();

И тамЯ не могу понять 3 вещи: 1) действительно ли getTimezoneOffset () уже содержит информацию о летнем времени 2) и если нет, то какой лучший способ проверить это - пользователь в летнее время (потому что я читал, что в данный момент у некоторых стран нети города в своей базе) 3) Moment (). add (Moment (). utcOffset (), 'm') возвращает дату с сохранением дневного света?

1 Ответ

0 голосов
/ 19 ноября 2018

И тут я не могу понять 3 вещи: 1) действительно ли getTimezoneOffset () уже содержит информацию о дневном свете

Момент - это обертка для объектов Date в ECMAScript.Смещение часового пояса для встроенного экземпляра Date зависит от настроек хост-системы.В зависимости от реализации он может отражать или не отражать исторические изменения часовых поясов для соответствующей даты (т. Е. Даты, когда метод вызывается).По крайней мере, он будет отражать текущие настройки.

2), а если нет, то какой лучший способ проверить это - пользователь в летнее время (потому что я читал, что в данный момент у некоторых стран и городов нетэто своя база)

Нужно определить "лучше".Помимо других библиотек (например, Luxon ), существуют веб-API, такие как timezonedb и Date.prototype.toLocaleString с опцией timeZone , в которой используются названия местоположений IANA , например "Азия / Шанхай".Вы также можете загрузить и использовать базу данных часовых поясов IANA, если хотите.

3) возвращает дату Moment (). Add (Moment (). UtcOffset (), 'm') с сохранением дневного света.?

Вы не можете изменить смещение часового пояса, есть только геттер, поэтому к любой «локальной» дате будет применено смещение часового пояса, будь то стандартное или летнее смещение для конкретногодата и место.Все вышеперечисленное делает смещение времени на смещение, оно не меняет часовой пояс (если только он не смещен за границу перехода на летнее время).

Объекты даты в основе имеют UTC, поэтому общий подход заключается в использованииUTC для всего и только смещение часового пояса для представления.Это не охватывает все сценарии, но это делает большинство.В остальных случаях требуются особые подходы, основанные на вариантах использования.

Если вы опишите, что вы пытаетесь сделать, вы можете получить более релевантные ответы.

...