首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在用“`Intl`”格式化日期时保留时区信息

在用“`Intl`”格式化日期时保留时区信息
EN

Stack Overflow用户
提问于 2022-08-03 10:40:04
回答 1查看 224关注 0票数 0

我使用英特将时间戳格式化为人类可读的文本。

请考虑以下时间戳:

代码语言:javascript
复制
const timestamp = "2020-11-21T09:17:00-08:00"

它包括时区信息-08:00

当像这样格式化时间戳时:

代码语言:javascript
复制
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)

我看到的结果是:

代码语言:javascript
复制
21 November 2020, 18:17 GMT+1

我目前位于时区GMT+1,所以这是合理的,它显示的时间在我的本地时区。

是否有一种方法可以让Intl 格式化时间戳中指定的时区中的日期?

其结果应该是:

代码语言:javascript
复制
21 November 2020, 09:17 UTC-8

到目前为止,我发现的是,我们可以使用timeZone选项。但这似乎不适合我。当指定timeZone: 'UTC-8'时,我得到了一个崩溃,上面写着“无效时区UTC-8”。使用时区的情况也是一样:UTC-08:00-08:00-8

EN

回答 1

Stack Overflow用户

发布于 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中测试)。

代码语言:javascript
复制
console.log(new Date().toLocaleString('en', {
  timeZone: 'Etc/GMT+8',
  timeZoneName: 'long'
}));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73220329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档