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 转换为 .NetDateTime
,在服务器上计算客户端的时区,在浏览器中将 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 格式化带有时区偏移的日期?