You need to enable JavaScript to run this app. JavaScript使用ISO格式日期初始化Date对象报错的处理与格式化方法
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript使用ISO格式日期初始化Date对象报错的处理与格式化方法

问题原因

你现在碰到的语法报错和这个ISO格式日期的兼容性完全无关,本质是代码写法漏了给日期字符串加引号。
JS引擎解析你写的new Date(2021-01-27T14:29:22.723782Z)时,会把括号里不带引号的内容当成算术表达式和非法字符,在语法解析阶段就直接抛出「Invalid or unexpected token」的错误,根本走不到Date对象解析日期的环节。
后端返回的带Z后缀的ISO 8601格式字符串,本身就是JS Date构造函数原生支持的合法入参,只要作为普通字符串传入,就能正常解析。

正确处理流程

修正Date初始化写法

把日期值用引号包裹,作为字符串传入构造函数即可:

// 正确写法:字符串带引号
const date = new Date('2021-01-27T14:29:22.723782Z')

如果这个日期值是从接口返回的变量拿到的,比如const backendTime = response.data.createTime,直接把变量传给Date即可,不需要额外加引号:

const date = new Date(backendTime)

按DD/MM/YYYY:MM:SS格式提取结果

需要注意几个容易踩的细节:

  • Date对象的月份是从0开始计数的,取出的月份值要+1才是实际的自然月数
  • 个位数的日、月、时、分要补前导零,保证输出格式统一为两位数字
  • 原日期字符串带Z标记,代表是UTC时区的时间,如果要严格对应后端返回的UTC时间数值,用getUTC*系列方法取值;如果要展示用户本地时区转换后的时间,换成普通的get*系列方法即可

可直接运行的示例代码:

const rawBackendTime = '2021-01-27T14:29:22.723782Z'
const dateInstance = new Date(rawBackendTime)

// 个位数补零工具
const padZero = (num) => String(num).padStart(2, '0')

// 拼接目标格式 DD/MM/YYYY:MM:SS
const formattedResult = [
  padZero(dateInstance.getUTCDate()),
  padZero(dateInstance.getUTCMonth() + 1),
  dateInstance.getUTCFullYear()
].join('/') + ':' + [
  padZero(dateInstance.getUTCHours()),
  padZero(dateInstance.getUTCMinutes())
].join(':')

// 最终输出:27/01/2021:14:29
console.log(formattedResult)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 12:06:05