微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在javascript中显示包含其ISO8601偏移量的小时数

如何解决在javascript中显示包含其ISO8601偏移量的小时数

我返回了一组 ISO8601 日期及其偏移量。 我想向用户显示根据该偏移量计算的小时数,而不是本地偏移量。不幸的是,我没有时区,以便使用 Intl 界面。

一个例子。想象一下,我在 etc/GMT+4 上。如果我被退回:

2019-05-30T07:00:00.000+01:00

我想向用户展示以下内容

07:00:00

不是:

10:00

解决方法

不求助于图书馆的最佳选择是:

const input = "2019-05-30T07:00:00.000+01:00";
const localTime = input.substring(11,19); // assuming you want to truncate milliseconds
console.log(localTime);

原因是在使用Date对象解析诸如字符串时,应用偏移信息,但随后将其丢弃。换句话说,以下所有内容都是等价的:

new Date("2019-05-30T07:00:00.000+01:00")
new Date("2019-05-30T06:00:00.000Z")
new Date(1559196000000)

实际存储在 Date 对象中的唯一内容是值 1559196000000。因此,在创建 Date 对象后,无论对其进行多少操作都不能保证返回本地小时数,因为它最初以 UTC+1 偏移量显示。

LuxonMoment 这样的库通过在单独的内部字段中保留偏移量和/或原始字符串来处理这个问题。 Date 对象没有这样的字段。

在不久的将来,JavaScript 将能够使用 Temporal 提出的对象和函数在本机处理此问题。目前,您可以手动解析字符串或使用库。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。