如何获取特定时区的UTC偏移?关于getTimezoneOffset()的疑问
问题解决:按时区标识符排序城市 & 获取指定时区偏移量
为什么getTimezoneOffset()不管用?
JavaScript的Date对象本质上只存储UTC时间戳,没有自带时区信息。不管你构造Date时传入什么时区字符串,调用getTimezoneOffset()时,它始终返回当前运行环境的本地时区与UTC的偏移量,和你传入的时区完全无关。这就是你测试代码结果不符合预期的原因——哪怕用Day.js的tz()指定了时区,转成Date对象后会丢失时区信息,调用getTimezoneOffset()依然返回本地偏移。
用Day.js正确获取指定时区的偏移量
既然已经用Day.js,就别转成原生Date了,直接用Day.js的tz插件提供的utcOffset()方法,它能直接返回指定时区相对于UTC的偏移分钟数:
// 获取洛杉矶时区的当前偏移量(夏令时为-480,冬令时为-420) console.log(dayjs().tz('America/Los_Angeles').utcOffset());
按时区偏移量排序城市的方案
假设你有一组城市数据:
const cities = [ { name: '洛杉矶', timezone: 'America/Los_Angeles' }, { name: '纽约', timezone: 'America/New_York' }, { name: '北京', timezone: 'Asia/Shanghai' }, { name: '伦敦', timezone: 'Europe/London' } ];
可按以下步骤排序(建议固定日期避免夏令时导致偏移量波动,保证排序稳定):
// 固定一个日期,规避夏令时影响 const fixedDate = dayjs('2024-06-01'); const sortedCities = [...cities].sort((a, b) => { const offsetA = fixedDate.tz(a.timezone).utcOffset(); const offsetB = fixedDate.tz(b.timezone).utcOffset(); // 按偏移量升序排列:西时区在前,东时区在后 return offsetA - offsetB; }); console.log(sortedCities);
额外说明
- Day.js的
utcOffset()会自动处理夏令时,比手动使用标准偏移更准确。 - 确保已正确引入Day.js的
tz插件及对应时区数据(如dayjs-timezone包),否则tz()方法无法生效。
内容的提问来源于stack exchange,提问作者WoJ
相关产品推荐
相关产品推荐

