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

如何将REST API返回的无效日期字符串转换为JavaScript Date

处理非标准格式的日期字符串:以"20180517T010237"为例

你的问题核心在于moment的格式串和输入的日期格式不匹配,先给你修复后的moment方案,再补充几个原生JS的简便方法,不用依赖库也能搞定。

修复后的Moment.js方案

你之前写的格式串"YYYY-MM-DD T HH.mm.ss"和输入的"20180517T010237"完全不对应——输入里没有分隔符(连字符、点号),也没有空格,所以必须严格按照输入的结构来写格式串:

let date = moment("20180517T010237", "YYYYMMDDTHHmmss").toDate();

这样moment就能正确识别这个日期字符串了,因为YYYYMMDD对应无分隔符的年月日,T是固定的分隔字符,HHmmss对应无分隔符的时分秒。

原生JavaScript方案(无需依赖库)

如果不想用moment,也可以直接通过字符串截取或正则解析来处理,毕竟这个日期格式是固定的结构:

方法1:字符串截取

利用固定位置直接提取年、月、日等部分,注意月份要减1(因为JS的Date对象月份是0-11):

const dateStr = "20180517T010237";
const date = new Date(
  dateStr.slice(0, 4),       // 年:2018
  dateStr.slice(4, 6) - 1,  // 月:05 → 4(JS月份从0开始)
  dateStr.slice(6, 8),      // 日:17
  dateStr.slice(9, 11),     // 时:01
  dateStr.slice(11, 13),    // 分:02
  dateStr.slice(13, 15)     // 秒:37
);

方法2:正则表达式提取

用正则匹配更灵活,也能顺便做格式校验:

const dateStr = "20180517T010237";
const regex = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})$/;
const matchResult = dateStr.match(regex);

if (matchResult) {
  const [, year, month, day, hours, minutes, seconds] = matchResult;
  const date = new Date(year, month - 1, day, hours, minutes, seconds);
  // 处理date对象
} else {
  console.log("日期格式不符合预期");
}

这两种原生方法都能轻松搞定这种非标准的日期字符串,不用依赖第三方库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:27:49