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

如何获取特定时区的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:48:31