在JavaScript中将历史德国本地时间记录转换为UTC

时间:2017-12-22 19:14:55

标签: javascript node.js

我需要转换德国本地时间记录,没有区域信息,即

var data = [
  "2017-12-02 20:27:02",
  "2017-12-02 20:50:00"
]

到UTC记录,即减去时区偏移并尊重夏令时。我知道有getTimezoneOffsettoISOString函数,如果我的系统区域设置设置为德语,它将起作用。例如,我可以使用

转换日期
var d = new Date(data[0])
> Sat Dec 02 2017 20:27:02 GMT+0100 (CET)
d.toISOString()
> '2017-12-02T19:27:02.000Z'

但是,我需要一个安全的解决方案,适用于任何具有任何语言环境的服务器,例如,在云端。

2 个答案:

答案 0 :(得分:0)

感谢yBrodsky的评论我找到了使用moment-timezone的解决方案:

moment = require("moment-timezone")
var d = moment.tz(data[0], "Europe/Berlin").toDate()    
d.toISOString()
> '2017-12-02T19:27:02.000Z'

答案 1 :(得分:0)

您可以使用moment.js在JavaScript中进行日期计算。要解析特定时区的日期,您还需要moment.js timezone。然后,您可以使用tz()函数中的格式解析日期。然后,该日期可用作moment对象,您可以使用所有moment.js功能(例如时间/日期计算,格式设置等)。请参阅以下示例:

var dateString = '2017-12-02 20:27:02';
var dateFormat = 'YYYY-MM-DD HH:mm:ss';
var date = moment.tz(dateString, dateFormat, "Europe/Berlin");

console.log(date.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone-with-data.min.js"></script>