我使用英特将时间戳格式化为人类可读的文本。
请考虑以下时间戳:
const timestamp = "2020-11-21T09:17:00-08:00"它包括时区信息-08:00。
当像这样格式化时间戳时:
const formattedDateTime = new Intl.DateTimeFormat(undefined, {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
timeZoneName: 'shortOffset'
}).format(new Date(timestamp))
console.log(formattedDateTime)我看到的结果是:
21 November 2020, 18:17 GMT+1我目前位于时区GMT+1,所以这是合理的,它显示的时间在我的本地时区。
是否有一种方法可以让Intl 格式化时间戳中指定的时区中的日期?
其结果应该是:
21 November 2020, 09:17 UTC-8到目前为止,我发现的是,我们可以使用timeZone选项。但这似乎不适合我。当指定timeZone: 'UTC-8'时,我得到了一个崩溃,上面写着“无效时区UTC-8”。使用时区的情况也是一样:UTC-08:00、-08:00和-8
发布于 2022-08-03 20:48:32
根据ECMA-402,timeZone选项只接受有效的IANA代表位置。对于-08:00的固定偏移量,区域“等”和位置"GMT+8“(即"Etc/GMT+8")可以使用。注意偏移量的反向符号(出于某种原因遵从POSIX样式)。
这个符号似乎只支持整个小时的偏移。虽然+5:30是一个有效的偏移量,但是将timeZone选项设置为"Etc/GMT-530“会引发一个范围错误:无效的timeZone选项(在Safari、Firefox和Chrome中测试)。
console.log(new Date().toLocaleString('en', {
timeZone: 'Etc/GMT+8',
timeZoneName: 'long'
}));
https://stackoverflow.com/questions/73220329
复制相似问题