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

JavaScript如何检测指定格式日期是否处于另一日期的最近X天范围内

日期范围判断工具函数实现方案

函数命名优化

你原来的isWithinTheLastDays可以简化为isDateWithinLastDays,语义更清晰也更简洁。

实现思路

  • 先解决yyyy.m.d格式的日期解析问题,手动拆分年月日构造Date对象,避免不同环境下日期解析的兼容性问题
  • 所有日期统一转换为当日0点的时间戳,消除时间部分的干扰,保证自然日判断的准确性
  • 使用Date原生的setDate方法计算基准日期往前推N天的日期,自动处理跨月、闰年、夏令时等边界情况,不需要手动处理复杂的日历逻辑

完整代码实现

/**
 * 判断目标日期是否处于基准日期的最近X天范围内(默认包含基准日当天)
 * @param {string} baseDateStr 基准日期,格式为yyyy.m.d
 * @param {string} targetDateStr 待判断的目标日期,格式为yyyy.m.d
 * @param {number} days 最近X天的天数,需为正整数
 * @returns {boolean} 是否在范围内
 */
function isDateWithinLastDays(baseDateStr, targetDateStr, days) {
  // 辅助函数:解析yyyy.m.d格式的日期为当日0点的Date对象
  const parseCustomDate = (dateStr) => {
    const [year, month, day] = dateStr.split('.').map(Number)
    // 月份从0开始计数,所以要减1
    const date = new Date(year, month - 1, day)
    // 校验日期合法性
    if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
      throw new Error(`无效的日期格式:${dateStr},请使用yyyy.m.d格式`)
    }
    return date
  }

  // 参数合法性校验
  if (!Number.isInteger(days) || days <= 0) {
    throw new Error('days参数必须为正整数')
  }

  const baseDate = parseCustomDate(baseDateStr)
  const targetDate = parseCustomDate(targetDateStr)

  // 计算基准日期往前推days天的最早日期边界
  const earliestDate = new Date(baseDate)
  // +1是因为包含基准日当天,比如最近7天就是基准日-6天到基准日,共7天
  earliestDate.setDate(baseDate.getDate() - days + 1)

  // 比较时间戳判断是否在范围内
  return targetDate >= earliestDate && targetDate <= baseDate
}

测试用例

// 你给出的示例测试
console.log(isDateWithinLastDays('2021.6.12', '2021.6.10', 7)) // true 符合预期
console.log(isDateWithinLastDays('2021.6.12', '2021.6.01', 7)) // false 符合预期
// 边界场景测试
console.log(isDateWithinLastDays('2021.6.12', '2021.6.5', 7)) // true 6月5到6月12刚好7天
console.log(isDateWithinLastDays('2021.1.2', '2020.12.30', 7)) // true 跨月场景正常
console.log(isDateWithinLastDays('2020.3.2', '2020.2.28', 7)) // true 闰年2月场景正常

调整说明

如果不需要包含基准日当天,把earliestDate.setDate(baseDate.getDate() - days + 1)里的+1去掉即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:18:00