如何从指定格式日期字符串提取UTC偏移量且不使用moment.js
原生JavaScript提取ISO日期字符串UTC偏移分钟数方案
实现思路
- 用正则匹配日期字符串末尾的
±HH:MM格式偏移字段 - 拆分匹配结果获取符号、小时数值、分钟数值
- 按规则换算为总分钟数:
符号 * (小时数 * 60 + 分钟数)
完整实现代码
function getUtcOffsetMinutes(dateStr) { // 匹配末尾的±HH:MM格式偏移,兼容Z后缀的UTC0场景 const offsetMatch = dateStr.match(/([+-])(\d{2}):(\d{2})$|Z$/); if (!offsetMatch) { // 无匹配偏移时可按需调整返回逻辑,此处默认返回0 return 0; } // 匹配到Z后缀直接返回0(UTC+0) if (offsetMatch[0] === 'Z') return 0; const sign = offsetMatch[1] === '+' ? 1 : -1; const hours = parseInt(offsetMatch[2], 10); const minutes = parseInt(offsetMatch[3], 10); return sign * (hours * 60 + minutes); } // 测试用例 console.log(getUtcOffsetMinutes('2021-05-01T23:59:59.999-05:00')); // 输出:-300 console.log(getUtcOffsetMinutes('2023-10-01T12:00:00+05:30')); // 输出:330 console.log(getUtcOffsetMinutes('2024-01-01T00:00:00Z')); // 输出:0
注意事项
- 该实现仅依赖原生JS API,无任何第三方依赖,可在所有支持ES5及以上的环境运行
- 正则仅匹配字符串末尾的偏移字段,不会误匹配字符串中间的时间数字
- 支持兼容带毫秒、不带毫秒、UTC后缀Z的各类标准ISO 8601带偏移日期格式
内容的提问来源于stack exchange,提问作者Gautham Shetty
相关产品推荐
相关产品推荐

