如何使用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
相关产品推荐
相关产品推荐

