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

如何通过JavaScript获取指定时区的当前UTC偏移量?

获取指定IANA时区的UTC偏移量(原生JS + Day.js方案)

原生JavaScript实现

原生JS可以通过Intl.DateTimeFormat API结合Date对象计算目标时区的当前UTC偏移量,以下两种方法都能得到你需要的分钟级结果(比如-420、-240):

方法一:解析时区偏移字符串

直接提取时区的偏移标识并计算总分钟数:

function getUtcOffsetMinutes(timeZone) {
  const now = new Date();
  // 格式化时指定要获取时区偏移的短格式(如GMT-0700)
  const formatter = new Intl.DateTimeFormat('en-US', {
    timeZone,
    timeZoneName: 'shortOffset'
  });
  // 提取时区偏移部分
  const offsetStr = formatter.formatToParts(now).find(p => p.type === 'timeZoneName').value;
  
  // 解析偏移的符号、小时和分钟
  const sign = offsetStr.startsWith('GMT+') ? 1 : -1;
  const hours = parseInt(offsetStr.slice(3, 5), 10);
  const minutes = parseInt(offsetStr.slice(5, 7), 10);
  
  // 转换为总分钟数,结果为「本地时间 - UTC时间」的差值
  return sign * (hours * 60 + minutes);
}

// 测试示例
console.log(getUtcOffsetMinutes('America/Los_Angeles')); // 夏令时输出-420,冬令时输出-480
console.log(getUtcOffsetMinutes('America/New_York')); // 夏令时输出-240,冬令时输出-300

方法二:利用getTimezoneOffset取反

注意:Date.prototype.getTimezoneOffset()返回的是UTC时间 - 本地时间的分钟数,因此取反后才能得到你需要的「本地时间 - UTC时间」偏移量:

function getUtcOffsetMinutes(timeZone) {
  const now = new Date();
  // 格式化目标时区的当前时间为ISO格式字符串
  const formatter = new Intl.DateTimeFormat('en-US', {
    timeZone,
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
  });
  const parts = formatter.formatToParts(now);
  const localIsoStr = `${parts.find(p => p.type === 'year').value}-${parts.find(p => p.type === 'month').value}-${parts.find(p => p.type === 'day').value}T${parts.find(p => p.type === 'hour').value}:${parts.find(p => p.type === 'minute').value}:${parts.find(p => p.type === 'second').value}`;
  
  // 创建对应时区的本地时间对象,计算偏移
  const localDate = new Date(localIsoStr);
  return -localDate.getTimezoneOffset();
}

// 测试
console.log(getUtcOffsetMinutes('America/Los_Angeles')); // 符合预期的偏移值

Day.js实现(更简洁)

如果使用Day.js,需要配合utc和timezone插件:

  1. 引入依赖:
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/utc.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/timezone.js"></script>
  1. 核心代码:
dayjs.extend(window.dayjs_plugin_utc);
dayjs.extend(window.dayjs_plugin_timezone);

function getUtcOffsetMinutes(timeZone) {
  // dayjs.tz()创建对应时区的时间对象,utcOffset()直接返回分钟级偏移
  return dayjs.tz(timeZone).utcOffset();
}

// 测试
console.log(getUtcOffsetMinutes('America/Los_Angeles')); // -420(夏令时)
console.log(getUtcOffsetMinutes('America/New_York')); // -240(夏令时)

注意:所有方法都会自动适配夏令时/冬令时变化,返回当前时间对应的实时偏移量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:52:39