我正在尝试解析使用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对象。
非常感谢您的时间,祝您有愉快的一天。
答案 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()
(请注意,我还没有对它进行彻底的测试)