0

0

计算两个 Bootstrap 日期选择器之间相差的整年数

碧海醫心

碧海醫心

发布时间:2026-02-12 17:22:44

|

530人浏览过

|

来源于php中文网

原创

计算两个 Bootstrap 日期选择器之间相差的整年数

本文介绍如何基于 bootstrap datepicker 和 jquery,准确计算用户在两个日期输入框中选择的起止日期之间的完整年份数(仅取年份差,忽略月日细节),并提供可直接运行的完整示例代码与关键注意事项。

在实际业务场景中(如合同年限计算、年龄估算、服务周期展示等),常需快速获取两个日期之间的“年份跨度”。需要注意的是:此处的“年份差”通常指纯年份数值相减(即 endYear - startYear),而非精确到天的完整年数(如 moment.js 的 .diff('year', true))。 本教程聚焦于简洁、高效、兼容性好的原生方案,适用于 Bootstrap Datepicker v1.9+ 与 jQuery 环境。

✅ 正确实现逻辑

核心思路是:

  1. 获取两个 元素的日期字符串值(格式为 dd/mm/yyyy);
  2. 使用 new Date(dateString) 解析为 JavaScript Date 对象;
  3. 调用 .getFullYear() 提取年份(返回整数,安全可靠);
  4. 直接相减得到年份差,并写入目标元素。

⚠️ 关键修正点(原代码常见错误):

Baklib
Baklib

在线创建产品手册、知识库、帮助文档

下载
  • ❌ 错误地对整个日期字符串调用 parseInt()(如 parseInt("02/05/2023") → 2),导致结果完全失真;
  • ❌ 使用 .append() 向

    中追加内容,造成多次触发时数字堆叠(如 444);应使用 .html() 或 .text() 替换全部内容;

  • ❌ 未处理空值或无效日期,可能导致 NaN;建议添加容错判断。

? 完整可运行示例

以下为精简优化后的 HTML + JS 示例(已验证兼容 Chrome/Firefox/Edge):

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>Bootstrap 日期年份差计算</title>
  <!-- Bootstrap CSS -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  <!-- Font Awesome -->
  <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
  <!-- Bootstrap Datepicker CSS -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker3.min.css">
</head>
<body class="container mt-4">
  <h4>计算两个日期之间的年份差</h4>
  <form>
    <div class="form-group mb-3">
      <label>起始日期</label>
      <div class="input-group date">
        <input type="text" class="form-control" id="fecha1" placeholder="dd/mm/yyyy">
        <div class="input-group-append">
          <span class="input-group-text"><i class="fa fa-calendar"></i></span>
        </div>
      </div>
    </div>

    <div class="form-group mb-3">
      <label>结束日期</label>
      <div class="input-group date">
        <input type="text" class="form-control" id="fecha2" placeholder="dd/mm/yyyy" onchange="calculateYears()">
        <div class="input-group-append">
          <span class="input-group-text"><i class="fa fa-calendar"></i></span>
        </div>
      </div>
    </div>

    <div class="alert alert-info">
      <strong>结果:</strong><span id="result">—</span> 年
    </div>
  </form>

  <!-- Scripts -->
  <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>

  <script>
    // 初始化日期选择器(支持中文)
    $(function() {
      $('.date').datepicker({
        language: 'zh-CN',
        autoclose: true,
        format: 'dd/mm/yyyy',
        todayHighlight: true
      });
    });

    function calculateYears() {
      const $from = $('#fecha1');
      const $to = $('#fecha2');
      const fromVal = $from.val().trim();
      const toVal = $to.val().trim();

      // 容错:任一为空则清空结果
      if (!fromVal || !toVal) {
        $('#result').text('—');
        return;
      }

      const date1 = new Date(fromVal);
      const date2 = new Date(toVal);

      // 验证日期有效性
      if (isNaN(date1.getTime()) || isNaN(date2.getTime())) {
        $('#result').text('无效日期');
        return;
      }

      const years = date2.getFullYear() - date1.getFullYear();
      $('#result').text(Math.max(0, years)); // 确保不为负数
    }
  </script>
</body>
</html>

? 注意事项与进阶建议

  • 格式强依赖:本方案要求 format: "dd/mm/yyyy" 与 new Date("dd/mm/yyyy") 兼容。现代浏览器普遍支持该格式解析,但若需更高兼容性(如旧版 IE),建议使用 moment.js 或手动拆分字符串解析。
  • 语义化说明:此方法计算的是“日历年份差”,例如 01/01/2023 到 31/12/2024 返回 1(而非 1.99),符合多数业务对“合同年限”“服务期”的理解。
  • 双向联动增强:可扩展为监听两个输入框(onchange + onblur),并在任一日期变更时实时更新结果。
  • 国际化适配:通过 language: 'zh-CN' 加载对应 locale 文件,确保日历显示本地化(星期、月份名称等)。

掌握这一轻量级实现,即可在不引入重型时间库的前提下,稳健完成常见年份跨度计算需求。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

153

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

317

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

403

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

508

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

249

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

125

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

49

2026.01.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.3万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 10.9万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号