Intl.DateTimeFormat() 中 timeZone 选项到底有什么作用

Alb*_*ing 11 javascript timezone timestamp utc gmt

我很难理解timeZone该方法中的选项Intl.DateTimeFormat()到底是做什么的。我还找不到这方面的深入资源。任何解释将不胜感激。

背景:我们需要在前端显示后端服务器的时间戳,并且时区偏移存在一些问题。目前,我认为根据本地客户端时间显示正确时间的解决方案如下:

Intl.DateTimeFormat('en-GB', {
          hour: 'numeric',
          minute: 'numeric',
          second: 'numeric',
          timeZone: 'GMT'
        }).format(timestamp)}
Run Code Online (Sandbox Code Playgroud)

我不完全理解,为什么我需要传递选项 timeZone: 'GMT' 作为“格林威治标准时间”才能在前端获得正确的时间。

Álv*_*lez 16

时区用于计算当地时间:

const timeZones = [
    "GMT",
    "Europe/Madrid",
    "Asia/Tokyo"
];
const timestamp = new Date();
let displayDate;
for (timeZone of timeZones) {
    displayDate = Intl.DateTimeFormat('en-GB', {
        hour: 'numeric',
        minute: 'numeric',
        second: 'numeric',
        timeZone: timeZone
    }).format(timestamp);
    console.log("%s @ %s", displayDate, timeZone);
}
Run Code Online (Sandbox Code Playgroud)

如果完全省略,它将默认为运行代码的 JavaScript 运行时中的当前本地时区:

let displayDate = Intl.DateTimeFormat('en-GB', {
    hour: 'numeric',
    minute: 'numeric',
    second: 'numeric'
}).format(new Date());
console.log(displayDate);
Run Code Online (Sandbox Code Playgroud)

因此,该属性可用于使其显式/静态或能够使用其他时区。

  • JavaScript 中的日期并不完全是这样工作的。一个“Date”对象指向一个精确的(绝对)时刻(我不知道内部格式,也许这只是一个Unix时间,但我是在推测)。每当运行时需要生成(相对)本地时间时,就需要(并考虑)时区。 (2认同)