如何在Javascript中将时区缩写为3个字母的日期转换为UTC?

如何在Javascript中将时区缩写为3个字母的日期转换为UTC?,javascript,datetime,datetime-format,Javascript,Datetime,Datetime Format,我需要用Javascript将日期时间从我无法更改的输入格式(此格式为:“2019年7月30日星期二21:15:53 GMT”)转换为UTC 实际上,我需要将这些日期作为自Unix纪元(1970年)以来的毫秒数,但使用UTC将是一个开始 有没有一种方法可以轻松做到这一点?如果需要,我可以使用第三方库。我听说过moment-timezone.js,但不清楚如何解析3个字母的时区,即:。如果要将日期转换为UTC格式,可以使用toISOString() 欲了解更多信息,请查看此 此外,要将日期转换为毫

我需要用Javascript将日期时间从我无法更改的输入格式(此格式为:“2019年7月30日星期二21:15:53 GMT”)转换为UTC

实际上,我需要将这些日期作为自Unix纪元(1970年)以来的毫秒数,但使用UTC将是一个开始


有没有一种方法可以轻松做到这一点?如果需要,我可以使用第三方库。我听说过moment-timezone.js,但不清楚如何解析3个字母的时区,即:。

如果要将日期转换为UTC格式,可以使用toISOString()

欲了解更多信息,请查看此

此外,要将日期转换为毫秒,可以使用date.UTC()

例如:

utcMillisecond = (e) => {
    const regex = /(T)|(:)|(-)/g;
    const utc = new Date(e).toISOString().slice(0, 19).replace(regex, ' ').split(' ');
    const utcMillisecond = Date.UTC(utc[0], utc[1], utc[2], utc[3], utc[4])
    return utcMillisecond
}

utcMillisecond("Tue, 30 Jul 2019 21:15:53 GMT")
//1567199700000

正确的解决方案是建立一个库,将这些缩写映射到GMT的偏移量。既不,也不,也不这样做,但确实如此

幸运的是,
new Date()
可以解析您的格式减去时区,因此我们将把它分开并计算回偏移量:

从“时区缩写偏移量”导入时区;
函数abbrTzToUtc(日期字符串){
//从输入字符串中获取日期和时区
let[,date,tz]=dateString.match(/^(.*)\s+(\w+)$/);
//忽略时区并将日期解析为GMT
日期=新日期(日期+Z');
//添加由原始时区引起的偏移
日期=新日期(date.getTime()+时区[tz]*60*1000);
返回日期;
}
console.log(缩写为“2019年7月30日星期二21:15:53会议”);
作为测试,上述代码应返回
2019-07-30T22:15:53.000Z


如果您想要从Unix纪元开始的毫秒数,请改为返回日期.getTime()。

您将遇到一个问题,因为这三个字母组合不是唯一的。请参阅,例如,
ACT
AMT
。我有点困惑,您希望将此作为UNIX日期还是希望结果作为UTC字符串?这将适用于某些时区,例如
新日期('1/1/2020 EST')
,但不适用于其他时区,即使是唯一的:
新日期('1/1/2020 MET')
。这可能取决于运行时可用的区域设置,但MET示例在我的美国英语系统上不起作用。
Date.UTC(year[, month[, day[, hour[, minute[, second[, millisecond]]]]]])
utcMillisecond = (e) => {
    const regex = /(T)|(:)|(-)/g;
    const utc = new Date(e).toISOString().slice(0, 19).replace(regex, ' ').split(' ');
    const utcMillisecond = Date.UTC(utc[0], utc[1], utc[2], utc[3], utc[4])
    return utcMillisecond
}

utcMillisecond("Tue, 30 Jul 2019 21:15:53 GMT")
//1567199700000