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

如何使用Javascript/Node.js将'x days ago'类字符串解析为标准datetime格式

实现方案

方案1:无第三方依赖原生JS实现

无需引入任何外部库,通过正则匹配和原生Date API即可完成转换:

function parseAgoToISO(agoStr, baseDate = new Date()) {
  // 匹配数值、时间单位,兼容单复数、大小写
  const regMatch = agoStr.match(/^(\d+)\s+(minute|hour|day|month|year)s?\s+ago$/i);
  if (!regMatch) throw new Error('输入的时间格式不符合要求');

  const num = parseInt(regMatch[1], 10);
  const unit = regMatch[2].toLowerCase();
  const targetDate = new Date(baseDate);

  switch(unit) {
    case 'minute':
      targetDate.setMinutes(targetDate.getMinutes() - num);
      break;
    case 'hour':
      targetDate.setHours(targetDate.getHours() - num);
      break;
    case 'day':
      targetDate.setDate(targetDate.getDate() - num);
      break;
    case 'month':
      targetDate.setMonth(targetDate.getMonth() - num);
      break;
    case 'year':
      targetDate.setFullYear(targetDate.getFullYear() - num);
      break;
    default:
      throw new Error('不支持的时间单位');
  }
  // 原生toISOString输出的格式完全符合需求
  return targetDate.toISOString();
}

// 测试用例
console.log(parseAgoToISO('10 minutes ago')); // 输出示例:2024-05-20T06:22:18.321Z
console.log(parseAgoToISO('3 days ago'));
console.log(parseAgoToISO('1 year ago'));

该实现支持自定义基准时间(默认用当前时间),月份、闰年等边界场景由原生Date API自动处理,符合通用业务需求。

方案2:使用成熟第三方库实现

如果项目允许引入依赖,推荐用仍在维护的date-fns库直接解析,无需自己处理正则和边界逻辑:

  1. 先安装依赖:npm install date-fns
  2. 代码示例:
const { parseRelative, formatISO } = require('date-fns');

// 第二个参数为基准时间,不传默认用当前时间
const parsedDate = parseRelative('2 months ago', new Date());
console.log(formatISO(parsedDate)); // 输出标准ISO时间格式

moment.js核心库本身不支持相对时间字符串解析,需要额外引入对应插件才能实现,且moment官方已宣布停止维护,不建议在新项目中继续使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 17:09:04