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

如何在JavaScript中将日期时间字符串转换为UTC日期

JS ISO时间字符串转UTC日期解决方案

请问如何在JavaScript中将"2011-09-30T00:00:00"日期时间字符串转换为UTC日期?
我尝试使用new Date("2011-09-30T00:00:00")进行转换,但输出结果为"2011-09-29T23:00:00.000Z",不符合预期。

问题根因

不带时区标识的YYYY-MM-DDTHH:mm:ss格式字符串,在现代JS规范中默认会按照运行环境的本地时区解析。你拿到的输出结果,实际是你所在时区的2011-09-30 00:00对应的UTC时间,和你期望的「把输入字符串直接作为UTC时间解析」的逻辑不符。

可用解决方案

方案1:追加UTC标识(最简方案,兼容现代浏览器)

直接在输入字符串末尾添加Z标识,告知JS引擎该字符串为UTC时区时间,解析后即可得到预期结果:

const utcDate = new Date("2011-09-30T00:00:00Z");
console.log(utcDate.toISOString()); // 输出:2011-09-30T00:00:00.000Z

方案2:拆分后用Date.UTC生成(兼容全版本浏览器)

如果需要兼容旧版浏览器,可手动拆分时间字段后通过Date.UTC生成UTC时间戳,再转为Date对象:

const timeStr = "2011-09-30T00:00:00";
// 拆分日期和时间部分
const [datePart, timePart] = timeStr.split("T");
const [year, month, day] = datePart.split("-").map(Number);
const [hour, minute, second] = timePart.split(":").map(Number);
// Date.UTC接收的月份为0-based,需减1
const utcDate = new Date(Date.UTC(year, month - 1, day, hour, minute, second));
console.log(utcDate.toISOString()); // 输出:2011-09-30T00:00:00.000Z

注意事项

  • 不要依赖不带时区标识的字符串解析逻辑,旧版本IE等浏览器存在解析差异,部分会默认当做UTC时间处理,和现代浏览器行为不一致,以上两种方案兼容性更稳定。
  • 后续如果需要获取UTC时间的年月日时分秒字段,要调用getUTCFullYear()、getUTCMonth()、getUTCDate()等getUTC*系列方法,不要使用普通get*方法,后者会返回本地时区对应的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:45:01