我试图解析一个用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对象。
非常感谢你的时间,祝你有愉快的一天。
为此,您不需要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()
(请注意,我还没有彻底测试过)