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

如何使用date-fns/moment将带时区的ISO日期转换为UTC格式

带时区偏移的ISO字符串转UTC时间方案

首先纠正核心认知错误:

你认为的「累加2小时得到12:51:09即为UTC结果」是错误的。
ISO 8601格式中+02:00的含义是:字符串记录的本地时间比UTC时间快2小时,换算UTC的正确逻辑是减去2小时,对应正确UTC时间为2022-07-03T08:51:09Z。

所有成熟时间库、原生JS的日期解析逻辑都会自动处理偏移量,不需要手动做时间加减,手动计算很容易踩夏令时、时区规则变更的坑。

date-fns 实现

date-fns 可以直接解析带偏移的ISO字符串,解析后得到的Date对象内部存储的就是标准UTC时间戳:

import { parseISO, formatISO } from 'date-fns'

const sourceStr = '2022-07-03T10:51:09+02:00'
// 解析为Date对象,自动处理+02:00偏移
const date = parseISO(sourceStr)
// 输出标准UTC格式的ISO字符串,结果为 2022-07-03T08:51:09Z
const utcResult = formatISO(date, { format: 'extended' })

如果只需要获取UTC时间戳,直接调用date.getTime()即可拿到正确的毫秒级时间戳。

moment 实现

moment默认支持带偏移的ISO字符串解析,调用utc()方法即可切换到UTC模式输出:

import moment from 'moment'

const sourceStr = '2022-07-03T10:51:09+02:00'
// 解析字符串后切换为UTC模式
const utcMoment = moment(sourceStr).utc()
// 输出标准UTC格式字符串,结果为 2022-07-03T08:51:09Z
const utcResult = utcMoment.format()

原生JS实现(无需第三方库)

所有现代浏览器、Node.js环境下,原生Date构造函数已经支持解析这类带偏移的ISO字符串,不需要引入任何库即可完成转换:

const sourceStr = '2022-07-03T10:51:09+02:00'
const date = new Date(sourceStr)
// 直接输出标准UTC格式字符串,结果为 2022-07-03T08:51:09.000Z
const utcResult = date.toISOString()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:48:17