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

如何用纯数学方法在JavaScript中计算yyyymmdd格式整数日期的天数差

JavaScript纯数学计算yyyymmdd整数日期天数差方案

要求:不调用任何内置日期处理函数,仅用数学运算实现

核心思路

将两个输入的yyyymmdd格式整数统一转换为「从公元元年到该日期的总天数」,两个总天数取绝对值差值就是最终间隔天数,全程无日期API调用。

分步实现逻辑

  • 第一步:拆解日期整数得到年、月、日三个数值
    对任意日期整数dateInt,可通过取整、取模运算拆分:
    const year = Math.floor(dateInt / 10000)
    const month = Math.floor((dateInt % 10000) / 100)
    const day = dateInt % 100
    
  • 第二步:实现闰年判断逻辑
    闰年规则:能被4整除但不能被100整除,或能被400整除的年份为闰年,闰年2月多1天:
    function isLeapYear(y) {
      return (y % 4 === 0 && y % 100 !== 0) || (y % 400 === 0)
    }
    
  • 第三步:实现单个日期转总天数的辅助函数
    总天数 = 所有完整年份贡献的天数 + 当前年所有完整月份贡献的天数 + 当前月已过天数
    这里用小技巧简化闰年判断:如果当前月份小于3,把年份减1,不需要单独判断当前年的闰年是否需要加1天:
    function dateToTotalDays(dateInt) {
      let y = Math.floor(dateInt / 10000)
      let m = Math.floor((dateInt % 10000) / 100)
      const d = dateInt % 100
      // 月份小于3时,当年的闰年影响还没生效,年份减1统一计算
      if (m < 3) {
        y--
      }
      // 平年每月天数数组,索引从0对应1月
      const monthDays = [31,28,31,30,31,30,31,31,30,31,30,31]
      // 计算完整年份贡献的天数:每年365天 + 所有闰年多出来的1天
      let total = y * 365 + Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400)
      // 加上当前年完整月份的天数
      for (let i = 0; i < m - 1; i++) {
        total += monthDays[i]
      }
      // 如果月份大于2且是闰年,加1天
      if (m > 2 && isLeapYear(y + 1)) {
        total += 1
      }
      // 加上当前日的天数
      total += d
      return total
    }
    
  • 第四步:计算两个日期的差值
    两个总天数相减取绝对值就是间隔天数:
    function getDateDiff(date1, date2) {
      const days1 = dateToTotalDays(date1)
      const days2 = dateToTotalDays(date2)
      return Math.abs(days1 - days2)
    }
    

测试验证

用你给出的示例测试:

console.log(getDateDiff(20210206, 20210825)) // 输出200,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:06:05