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

JavaScript如何将Spring返回的非标准ISO时间字符串转为Epoch时间?

解决非标准ISO日期字符串转Epoch时间的问题

这个问题很常见——Java生成的日期格式和JS期望的标准ISO 8601格式略有差异,导致直接用new Date()解析会返回NaN。咱们一步步解决:

问题根源

JS的Date构造函数只识别带连字符的日期部分(YYYY-MM-DD)和带冒号的时区部分(±HH:mm),而你的字符串是YYYYMMDDTHH:mm:ss±HHmm,缺了这两个关键符号,所以解析失败。

解决方案1:手动修正格式(无依赖)

先把非标准字符串转换成JS能识别的标准格式,再解析成Date对象获取时间戳:

function getEpochFromCustomISO(isoString) {
  // 第一步:给日期部分添加连字符(20180410 → 2018-04-10)
  const formattedDate = isoString.slice(0,4) + '-' + isoString.slice(4,6) + '-' + isoString.slice(6,10);
  // 第二步:给时区部分添加冒号(+0000 → +00:00)
  const formattedTimeZone = isoString.slice(10).replace(/([+-]\d{2})(\d{2})$/, '$1:$2');
  // 拼接成标准ISO字符串
  const standardISO = formattedDate + formattedTimeZone;
  // 转换为Epoch时间(毫秒级)
  return new Date(standardISO).getTime();
}

// 测试示例
const customISO = '20180410T11:55:37+0000';
console.log(getEpochFromCustomISO(customISO)); // 输出 1523351737000

解决方案2:正则一次性替换(更简洁)

用正则表达式一步完成格式修正,代码更紧凑:

const customISO = '20180410T11:55:37+0000';
// 同时修正日期和时区格式
const standardISO = customISO
  .replace(/^(\d{4})(\d{2})(\d{2})/, '$1-$2-$3') // 处理日期部分
  .replace(/([+-]\d{2})(\d{2})$/, '$1:$2'); // 处理时区部分

const epochTime = new Date(standardISO).getTime();
console.log(epochTime); // 同样得到正确的时间戳

解决方案3:用日期库(推荐大型项目)

如果你的项目已经在用日期处理库(比如date-fns、luxon),可以直接用库的格式化解析能力,更省心:

以luxon为例:

import { DateTime } from 'luxon';

const customISO = '20180410T11:55:37+0000';
// 直接指定输入格式解析
const epochTime = DateTime.fromFormat(customISO, 'yyyyMMdd\'T\'HH:mm:ssZZ').toMillis();
console.log(epochTime);

额外提示

如果可以的话,也可以调整Java端的日期格式化代码,直接输出标准ISO 8601格式(比如用DateTimeFormatter.ISO_OFFSET_DATE_TIME),这样前端就不用额外处理啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:40:48