JavaScript如何获取指定时区的UTC格式Date对象
核心认知纠正
- JavaScript 中的
Date对象本身不存在时区属性,它内部仅存储Unix时间戳(即1970年1月1日UTC时间以来的毫秒数)。你在控制台看到的Tue Aug 31 2021 09:43:15 GMT-0700 (Pacific Daylight Time)这类输出,是浏览器打印Date对象时默认调用toString()方法、用当前环境的本地时区格式化生成的字符串,不是Date对象自带的属性,因此不存在「中部时区的Date对象」这种实体。 toLocaleString、Intl.DateTimeFormat返回字符串是符合设计的:所有时区相关的展示,本质都是将Date内部的时间戳按指定时区规则转换为格式化字符串,不可能得到绑定了指定时区的Date实例。
实现你需要的格式化字符串
你要的Aug 31 2021 11:43:15 GMT-0500 (Central Daylight Time)格式可以通过Intl.DateTimeFormat的formatToParts方法自定义拼接实现,代码如下:
function getCentralTimeFormattedStr(date = new Date()) { const formatter = new Intl.DateTimeFormat('en-US', { timeZone: 'US/Central', weekday: 'short', month: 'short', day: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false, timeZoneName: 'longOffset' }) // 将格式化后的各部分拆解为键值对 const parts = Object.fromEntries(formatter.formatToParts(date).map(item => [item.type, item.value])) // 拼接成目标格式,替换偏移量里的冒号适配你的要求 const offset = parts.timeZoneName.replace(':', '') return `${parts.weekday} ${parts.month} ${parts.day} ${parts.year} ${parts.hour}:${parts.minute}:${parts.second} ${offset} (Central Daylight Time)` } // 测试用例,对应你给出的示例时间 const testDate = new Date('2021-08-31T16:43:15Z') console.log(getCentralTimeFormattedStr(testDate)) // 输出:Tue Aug 31 2021 11:43:15 GMT-0500 (Central Daylight Time)
注意事项
如果需要做时间计算,直接用原始的Date实例操作即可,它本身存储的时间戳是时区无关的,只有需要展示给用户的时候调用上面的格式化方法生成对应时区的字符串就行。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

