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

如何检查日期数组是否递增?现有JavaScript函数异常求助

解决日期数组递增检查的问题

原代码的错误点

  • 每次循环仅转换当前索引的日期,未保存前一个日期的转换结果,根本无法完成前后日期的比较
  • 错误地将Date对象当作数组访问(convertedToDate[i]),这会返回undefined,导致所有比较逻辑完全失效
  • 逻辑偏差:原代码要求日期必须比前一天大1天,但需求仅需日期递增排列即可,不需要连续(比如['12/12/2023', '14/12/2023']也应返回true)
  • 未处理日期格式问题:new Date('dd/mm/yyyy')在JavaScript中会被默认按mm/dd/yyyy解析,遇到13/12/2023这类日期会直接变成无效日期,导致判断错误

正确实现方案

首先手动解析dd/mm/yyyy格式的日期,避免JS默认解析的坑,再逐一比较前后日期的大小:

// 辅助函数:将dd/mm/yyyy格式的字符串转换为标准Date对象
function parseDMY(dateStr) {
  const [day, month, year] = dateStr.split('/').map(Number);
  // JS的月份是0-based,所以要减1
  return new Date(year, month - 1, day);
}

function isIncreasing(dates) {
  // 空数组或单个元素的数组直接判定为递增
  if (dates.length <= 1) return true;

  let prevDate = parseDMY(dates[0]);
  // 检查第一个日期是否有效
  if (isNaN(prevDate.getTime())) {
    throw new Error(`无效日期格式: ${dates[0]}`);
  }

  for (let i = 1; i < dates.length; i++) {
    const currDate = parseDMY(dates[i]);
    // 检查当前日期是否有效
    if (isNaN(currDate.getTime())) {
      throw new Error(`无效日期格式: ${dates[i]}`);
    }

    // 当前日期小于等于前一个,直接返回false
    if (currDate <= prevDate) {
      return false;
    }

    prevDate = currDate;
  }

  return true;
}

// 测试用例
console.log(isIncreasing(['12/12/2023','13/12/2023'])); // true
console.log(isIncreasing(['12/12/2023','11/12/2023'])); // false
console.log(isIncreasing(['12/12/2023','11/12/2023','10/12/2023'])); // false
console.log(isIncreasing(['12/12/2023','14/12/2023','15/12/2023'])); // true

关键说明

  • 手动解析日期:通过split('/')拆分日、月、年,再传入Date构造函数,避免默认解析的格式错误
  • 有效性校验:用isNaN(date.getTime())判断日期是否合法,防止无效格式干扰判断逻辑
  • 递增判断:只需确保当前日期严格大于前一个日期,无需限制为连续的一天

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:52:45