从日期时间字符串获取偏移量并应用于新的日期对象

Hee*_*ega 2 javascript datetime date object momentjs

我有一个从后端返回的日期时间字符串,如下所示:

2018-12-30T20:00:00-05:00
Run Code Online (Sandbox Code Playgroud)

我正在尝试从此日期时间字符串中获取偏移量并将其应用于新的 Date 对象。

当我这样做时......我得到了客户的时区日期,而不是我想要的。

var time = "2018-12-30T20:00:00-05:00"
new Date(time)
Run Code Online (Sandbox Code Playgroud)

我不介意在 JS 中利用 momentjs 或任何其他库,但我正在尝试在我的前端执行此操作。

更新

如果从我的后端返回的日期有 -05:00 作为偏移量......那么当我在前端创建一个日期对象时......它应该具有相同的偏移量

例如:

2018-12-31T10:00:00-05:00
Run Code Online (Sandbox Code Playgroud)

Mar*_*yer 5

如果您愿意使用,moment您可以轻松地从日期/时间中提取偏移量utcOffset。您可以使用相同的函数将偏移量应用于新的日期/时间。这是两个表示相同时间但具有不同偏移量的矩对象。这会将第二个转换为第一个的偏移量而不更改绝对时间:

var time = "2018-12-30T10:00:00-05:00"
let m = moment.parseZone(time)
let offset = m.utcOffset()
console.log("original: ", m.format(), "Offset:", offset)

// same time as m but -1 ofset
let m2 = moment.parseZone("2018-12-30T14:00:00-01:00")
console.log("m2 original: ", m2.format())

// change offset
m2.utcOffset(offset)
console.log("m2 converted: ", m2.format())
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>
Run Code Online (Sandbox Code Playgroud)