You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Intl.DateTimeFormat在四个时区正确显示时间戳?

问题原因

你使用的PST、MST这类时区缩写不是标准IANA时区标识符,Intl.DateTimeFormat无法正确解析它们,导致部分时区被识别为错误的时间偏移(比如MST被解析为GMT-07,和PDT的偏移一致),所以出现了重复的时间结果。

ECMAScript规范要求Intl相关API使用IANA时区数据库中的完整时区字符串(如America/Los_Angeles),而非模糊的缩写。

解决方案

将时区缩写替换为对应的IANA时区标识符,修改后的代码如下:

const zones = [
  'America/Los_Angeles', // 对应PST/PDT
  'America/Denver',      // 对应MST/MDT
  'America/Chicago',     // 对应CST/CDT
  'America/New_York'     // 对应EST/EDT
];
zones.forEach((timeZone) =>
  console.log(
    new Intl.DateTimeFormat('en-US', {
      timeZone,
      timeStyle: 'full',
      dateStyle: 'full',
    }).format(1588743894000)
  )
);
预期输出

运行后会得到四个不同的正确时间:

Tuesday, May 5, 2020 at 10:44:54 PM Pacific Daylight Time
Tuesday, May 5, 2020 at 11:44:54 PM Mountain Daylight Time
Wednesday, May 6, 2020 at 12:44:54 AM Central Daylight Time
Wednesday, May 6, 2020 at 1:44:54 AM Eastern Daylight Time

如果使用date-fns-tz库,同样需要传入IANA时区标识符而非缩写,示例代码:

import { formatInTimeZone } from 'date-fns-tz';

const zones = [
  'America/Los_Angeles',
  'America/Denver',
  'America/Chicago',
  'America/New_York'
];
zones.forEach(timeZone => {
  console.log(formatInTimeZone(1588743894000, timeZone, 'EEEE, MMMM d, yyyy at h:mm:ss a zzzz'));
});

内容的提问来源于stack exchange,提问作者mpr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:53:11