Javascript - 将 ISO8601 UTC 时间转换为客户端的本地时间 [重复]

Posted

技术标签:

【中文标题】Javascript - 将 ISO8601 UTC 时间转换为客户端的本地时间 [重复]【英文标题】:Javascript - Convert ISO8601 UTC time to client's local time [duplicate] 【发布时间】:2019-08-10 08:00:21 【问题描述】:

我正在为我的网站使用 asp.net mvc 5,并且我正在使用 ISO8601 格式将交易日期作为 DateTime 对象从模型发送到 UTC 视图 - 2019-03-15T22:32:04.9143842Z

如果我从模型中收到2019-03-15T22:32:04.9143842Z 作为字符串,我需要一个可以将其转换为客户端本地时间的函数。因此,如果客户端在 PST 中,那么它应该将其转换为此类。

【问题讨论】:

您能否澄清一下哪个部分有问题 - 将 ISO8601 转换为 .Net DateTime,在服务器上计算客户端的时区,在浏览器中将 ISO8601 转换为本地时间? (@DiogoRocha 建议重复,但虽然这正是帖子所要求的,但它不太可能对您有所帮助,因为您不知道服务器上客户端的时区) 【参考方案1】:

您可以简单地将这种格式传递给Date 对象构造函数(或Date.parse)。

var d = new Date("2019-03-15T22:32:04.9143842Z");

末尾的Z 很重要,因为它表示UTC。

然后,您可以使用像 .toString().toLocaleString() 这样发出本地时间的函数。您可以找到Date 对象引用on MDN here。

在美国太平洋时区运行时:

console.log(d.toString());
//=> "Fri Mar 15 2019 15:32:04 GMT-0700 (Pacific Daylight Time)"

或者,您可以使用 Date-fns、Luxon 或 Moment 等库以特定方式将日期格式化为字符串。

【讨论】:

【参考方案2】:

此日期时间类型/标准是 iso 8601。 https://en.wikipedia.org/wiki/ISO_8601 如何使用 javascript 解析 iso 8601 日期有很多不同类型的可能性,其中之一是

new Date(isoDateString)

其他包括https://github.com/datejs/Datejs (Date.parse(isoDateString)) 等包或自己手动解析。 然后您可以获取客户时区并将时区更改为它/或任何所需的时区。

【讨论】:

以上是关于Javascript - 将 ISO8601 UTC 时间转换为客户端的本地时间 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中使用 ISO 8601 格式化带有时区偏移的日期?

ISO 8601日期转换

Swift:将 ISO8601 转换为日期

将 ISO 8601 转换为 unix 时间戳

如何使用 Shell 将 ISO 8601 时间戳转换为 Unix 时间戳?

如何将 ISO8601 格式转换为毫秒?