Moment.js / момент-часовой пояс: формат даты с типом даты «GMT-06: 00» - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь проанализировать дату, созданную с помощью moment.js, с часовым поясом, полученным из ответа API этого типа:

{
  "id": "MX",
  "name": "Mexico",
  "time_zone": "GMT-06:00"
}

У меня есть моментальный объект, созданный в реакции, но мне нужночтобы изменить его часовой пояс на тот, который получен API, в этом примере это «GMT-06: 00».

Для этого у меня есть эта функция:

setDateTimezone(date) {
    let timezone = this.state.siteData.time_zone;
    return moment(date).tz(timezone).format();
  }

Получает моментобъект и он изменяет свой часовой пояс с помощью tz.

Однако возвращается следующее сообщение об ошибке:

Часовой пояс момента не имеет данных для GMT-06: 00.

Мне нужно как-то разобрать формат часового пояса API с форматом, принятым Moment, и создать новый объект момента с этим новым часовым поясом.

Большое спасибо за ваше время, хорошего дня.

Ответы [ 2 ]

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

Вам не нужен момент-часовой пояс для этого.Просто используйте функцию utcOffset от Момента.Он будет игнорировать буквы, поэтому вы можете просто сделать это:

moment(date).utcOffset('GMT-06:00').format()
0 голосов
/ 26 февраля 2019

В идеальном мире у вас есть идентификатор часового пояса региона, а не статический TZ, подобный тому, который у вас есть, потому что они не осведомлены о летнем времени и не понимают политику времени.Если ваш единственный вариант - работать с форматом GMTxy, вы можете использовать Etc/GMTxy, см. Таблицу ниже:

https://github.com/eggert/tz/blob/2017b/etcetera#L36-L42

И https://momentjs.com/timezone/docs/#/zone-object/offset/

Так чтобыло бы что-то вроде:

const timezone = `Etc/GMT${parseInt(data.time_zone.replace(/GMT/, ''))}`
moment(date).tz(timezone).format()

(обратите внимание, я не проверил это полностью)

...