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

JavaScript中如何基于指定日期格式实现任意日期的大小比较

JavaScript 按指定格式比较日期的优化方案

下面给出两种比手动split('/')拆分更灵活、扩展性更强的实现方案:

方案1:原生JS正则匹配实现(无依赖)

先通过格式字符串确认年、月、日的顺序,再用正则提取日期字符串的对应分量,自动适配不同分隔符,新增日期格式不需要修改核心逻辑:

// 按指定格式解析日期为时间戳
function parseDate(dateStr, format) {
  // 提取格式里的分量顺序
  const order = format.match(/(YY|MM|DD)/g);
  // 提取日期字符串里的所有数字分量,自动兼容/、-、.等各类分隔符
  const parts = dateStr.match(/\d+/g);
  const map = {};
  order.forEach((key, idx) => map[key] = +parts[idx]);
  // 补全两位年份,可根据业务调整阈值
  const year = map.YY < 100 ? 2000 + map.YY : map.YY;
  // JS Date月份从0开始计数,需要减1
  return new Date(year, map.MM - 1, map.DD).getTime();
}

// 测试用例
const date1 = "21/04/2021";
const date2 = "25/01/2021";
const format = "DD/MM/YY";
console.log(parseDate(date1, format) > parseDate(date2, format)); // true
console.log(parseDate(date1, format) < parseDate(date2, format)); // false
console.log(parseDate(date1, format) === parseDate(date2, format)); // false

方案2:日期工具库实现(适合生产环境)

如果项目允许引入第三方依赖,直接用成熟的日期工具库内置的解析方法即可,不需要自己处理闰年、月份合法性校验、年份跨世纪等边界问题:

  • date-fns 可以直接用 parse(dateStr, format, new Date()) 得到标准Date对象
  • luxon 可以用 DateTime.fromFormat(dateStr, format).toJSDate() 实现解析

注意:不要直接用==/===比较两个Date对象本身,会比较内存引用地址,统一转成时间戳(调用getTime())或者用valueOf()比较才能得到正确的日期值对比结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:54:04