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

如何用JavaScript计算HTML date输入框中两个日期的年/月/日间隔

实现日期间隔计算(年/月/日格式)

没问题,我来帮你搞定这个需求——从两个<input type="date">控件获取日期,计算出精确的年、月、日间隔,输出符合要求的格式。

完整实现代码

HTML部分

首先我们需要基础的页面结构:两个日期输入框、触发计算的按钮,以及展示结果的区域。

<div>
  <label for="start-date">开始日期:</label>
  <input type="date" id="start-date">
</div>
<div>
  <label for="end-date">结束日期:</label>
  <input type="date" id="end-date">
</div>
<button onclick="calculateDateDiff()">计算间隔</button>
<div id="result"></div>

JavaScript部分

核心是编写日期差计算函数,这里要避免直接用毫秒差换算(因为不同月份天数、闰年都会影响结果),而是逐年逐月精确计算:

function calculateDateDiff() {
  // 获取输入的日期值并转为Date对象
  const startDate = new Date(document.getElementById('start-date').value);
  const endDate = new Date(document.getElementById('end-date').value);

  // 检查日期合法性
  if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
    document.getElementById('result').textContent = '请选择有效的日期!';
    return;
  }

  // 确保startDate早于endDate,处理用户输入顺序颠倒的情况
  let [date1, date2] = startDate <= endDate ? [startDate, endDate] : [endDate, startDate];

  let years = date2.getFullYear() - date1.getFullYear();
  let months = date2.getMonth() - date1.getMonth();
  let days = date2.getDate() - date1.getDate();

  // 处理借位逻辑:如果天数为负,从月份借1
  if (days < 0) {
    months--;
    // 获取借位后当月的天数(date1的月份+1,然后设置日期为0,得到上月最后一天)
    days += new Date(date1.getFullYear(), date1.getMonth() + 1, 0).getDate();
  }

  // 处理月份为负的情况,从年份借1
  if (months < 0) {
    years--;
    months += 12;
  }

  // 格式化输出结果
  const resultText = `${date1.toISOString().split('T')[0]} 与 ${date2.toISOString().split('T')[0]} 的间隔为${years}年${months}个月${days}天。`;
  document.getElementById('result').textContent = resultText;
}

关键细节说明

  • 日期合法性检查:通过getTime()是否为NaN判断用户是否选择了有效日期
  • 输入顺序兼容:自动交换日期顺序,确保始终用晚的日期减早的日期
  • 借位逻辑:当结束日期的天数/月份小于开始日期时,从更高单位借位,保证计算精确
  • 月份处理:JavaScript的getMonth()返回0-11(0代表1月),所以计算时直接相减即可,借位时补12个月就好

测试示例

比如输入开始日期2017-01-01,结束日期2019-02-15,点击按钮后会输出:

2017-01-01 与 2019-02-15 的间隔为2年1个月14天。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:42:39