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

如何在Node.js/JavaScript中从本地时间戳字符串获取UTC偏移量

获取ISO日期字符串的UTC偏移量(Node.js/JavaScript)

嘿,这个需求其实很好实现,我给你两种实用的方案,你可以根据场景选择:

方案一:利用Date对象解析后获取

JavaScript的Date对象可以直接解析这种ISO格式的日期字符串,然后通过内置方法拿到偏移信息:

const dateStr = '2020-05-19T15:45:07.2306062+05:30';
const date = new Date(dateStr);

// getTimezoneOffset()返回本地时间与UTC的偏移分钟数,注意符号是反向的
const offsetMinutes = date.getTimezoneOffset();

// 转换为标准的UTC偏移格式(+HH:mm/-HH:mm)
const absOffset = Math.abs(offsetMinutes);
const hours = Math.floor(absOffset / 60);
const minutes = absOffset % 60;
const utcOffset = `${offsetMinutes < 0 ? '+' : '-'}${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;

console.log(utcOffset); // 输出 "+05:30"

这里要注意:getTimezoneOffset()的返回值是本地时间比UTC慢的分钟数,所以如果你的日期是UTC+5:30,它会返回-330(因为本地时间比UTC早5小时30分,相当于UTC比本地晚330分钟),所以我们需要通过符号判断来修正方向。

方案二:直接从字符串提取偏移部分

如果不想依赖Date对象的解析逻辑,也可以用正则表达式直接从原字符串里抠出偏移段,这种方法更直接:

const dateStr = '2020-05-19T15:45:07.2306062+05:30';
// 匹配末尾的+/-HH:mm格式
const offsetRegex = /([+-]\d{2}:\d{2})$/;
const matchResult = dateStr.match(offsetRegex);

if (matchResult) {
  const utcOffsetStr = matchResult[1];
  console.log(utcOffsetStr); // 输出 "+05:30"

  // 如果需要转换成数值形式的总分钟数
  const [sign, hourPart, minutePart] = utcOffsetStr.match(/([+-])(\d{2}):(\d{2})/).slice(1);
  const totalOffsetMinutes = (parseInt(hourPart) * 60 + parseInt(minutePart)) * (sign === '+' ? 1 : -1);
  console.log(totalOffsetMinutes); // 输出 330
}

这种方法的优势是避免了不同环境下Date解析可能存在的兼容性问题(不过现代Node.js和浏览器对ISO格式的支持都很稳定),而且处理速度更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:32:27