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

时间:2019-02-26 14:11:24

标签: javascript reactjs datetime momentjs

我正在尝试解析使用moment.js创建的日期,以及从这种类型的API响应中获取的时区:

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

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

为此,我具有以下功能:

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

它接收一个矩对象,并用tz更改时区。

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

  

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

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

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

2 个答案:

答案 0 :(得分:1)

您不需要为此的时区。只需使用Moment中的utcOffset函数。它将忽略字母,因此您可以执行以下操作:

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

答案 1 :(得分:0)

在理想世界中,您将拥有区域时区标识符,而不是像您拥有的时区标识符那样的静态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()

(请注意,我还没有对它进行彻底的测试)