如何使用偏移值显示不同时区的时间

How to display times in different time zones using the offset value

我正在尝试以不同的时区显示当前时刻。我尝试使用本机 javascript 和 moment-js 包,但您似乎需要时区名称(例如“America/Toronto”)来显示我想要的信息。问题是我目前拥有的信息是来自所需时区的字符串格式的时间戳(字符串格式见下文),以及时间戳所属的城市。使用城市创建我的 tz 值的问题是我要显示的城市之一不在 IANA tz 数据库(卡尔加里)中。

字符串时间戳:

2022-04-26T14:19:42.8430964-04:00

可以看出,我确实有时间偏移量,我希望有一种方法可以将 js 中的这个字符串转换为 Date 对象,然后使用正确时区中的偏移量显示时间。

注意我要显示的是以下格式:

12:19 pm MT

我知道我可以解析出字符串,但我觉得这不是最佳做法,但我可能错了。

另请注意,我必须使用偏移量获取时区(例如 MT、ET,也可以是 MST、EST)。

你在这里不需要时间。 JS 本身就可以做到这一点。 Also moment is now deprecated.

您的 IANA 时区是 America/Edmonton。所以做起来很简单。该日期格式是 ISO 8601 日期格式,因此您只需将其传递给 new Date 构造函数,它就会正确解析它:

const iso8601 = '2022-04-26T14:19:42.8430964-04:00';
const date = new Date(iso8601);
console.log(date.toLocaleString('en-US', { timeZone: 'America/Edmonton' }));

输入日期设置的时区无关紧要,只要它在 ISO 日期中具有正确的偏移量即可。一旦它是 Date,偏移量就无关紧要了。例如:

const iso8601 = '2022-04-26T14:19:42.8430964Z';
const date = new Date(iso8601);
//time will now be 4 hours off above as the input date is UTC
console.log(date.toLocaleString('en-US', { timeZone: 'America/Edmonton' }));