提问者:小点点

moment.js/moment-timezone:使用'GMT-06:00'类型日期设置日期格式


我试图解析一个用Moment.js创建的日期,其中时区是从以下类型的API响应中获得的:

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

我在react中创建了一个moment对象,但是我需要将它的时区更改为API获得的时区,在本例中是“GMT-06:00”。

为此,我有以下功能:

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

它接收一个moment对象,并用TZ更改它的时区。

但是,这将返回以下错误:

时刻时区没有GMT-06:00的数据。

我需要以某种方式将API时区格式解析为Moment接受的格式,并用这个新时区创建一个新的Moment对象。

非常感谢你的时间,祝你有愉快的一天。


共2个答案

匿名用户

为此,您不需要moment-timezone。 只需使用utcoffset函数即可。 它将忽略字母,所以您可以这样做:

moment(date).utcOffset('GMT-06:00').format()

匿名用户

在完美世界中,您拥有一个区域时区标识符,而不是像您所拥有的那样的静态TZ,因为这些标识符既不了解DST,也不了解时间政治。 如果您唯一的选项是使用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()

(请注意,我还没有彻底测试过)