bootstrap datetimepicker(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Web 开发中,日期和时间选择器是用户交互场景中不可或缺的组件。无论是预约系统、日程安排,还是数据筛选功能,开发者都需要一种直观且高效的方式来让用户选择日期和时间。Bootstrap DateTimePicker 正是这样一个工具,它基于 Bootstrap 框架,结合了日期选择器(DatePicker)和时间选择器(TimePicker)的功能,为开发者提供了灵活且美观的解决方案。本文将从基础用法到高级配置,逐步解析如何在实际项目中使用 Bootstrap DateTimePicker,并通过案例演示其核心特性。


一、Bootstrap DateTimePicker 的核心概念

1.1 什么是 Bootstrap DateTimePicker?

Bootstrap DateTimePicker 是一个基于 Bootstrap 框架的日期时间选择器插件。它允许用户通过直观的界面选择日期和时间,并支持多种配置选项(如格式化输出、时间范围限制、语言切换等)。其核心优势在于:

  • 与 Bootstrap 兼容:无缝融入 Bootstrap 的样式体系,无需额外调整样式。
  • 高度可定制:通过配置参数灵活控制组件行为和外观。
  • 跨浏览器支持:兼容主流浏览器(Chrome、Firefox、Safari 等)。

1.2 核心功能概述

  • 日期选择:支持单日期选择、范围选择。
  • 时间选择:精确到分钟或秒级的时间选择。
  • 格式化输出:可自定义日期时间的显示格式(如 YYYY-MM-DD HH:mm)。
  • 国际化支持:内置多语言选项,支持中文、英文等。
  • 事件监听:通过绑定事件(如 dp.change)实现交互逻辑。

二、快速入门:安装与基础用法

2.1 安装步骤

方法一:通过 CDN 引入

在 HTML 文件中直接引入 Bootstrap DateTimePicker 的依赖资源:

<!-- 引入 Bootstrap 核心文件 -->  
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">  
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>  

<!-- 引入 Moment.js(用于日期时间处理) -->  
<script src="https://cdn.jsdelivr.net/npm/moment@2.29.4/min/moment.min.js"></script>  

<!-- 引入 DateTimePicker 的 CSS 和 JS -->  
<link href="https://cdn.jsdelivr.net/npm/eonasdan-bootstrap-datetimepicker@4.17.49/build/css/bootstrap-datetimepicker.min.css" rel="stylesheet">  
<script src="https://cdn.jsdelivr.net/npm/eonasdan-bootstrap-datetimepicker@4.17.49/build/js/bootstrap-datetimepicker.min.js"></script>  

方法二:通过 npm 安装

在命令行中执行以下命令:

npm install bootstrap moment eonasdan-bootstrap-datetimepicker  

然后在项目中按需引入相关文件。

2.2 基础 HTML 结构

创建一个简单的输入框,并为其绑定 DateTimePicker:

<div class="container mt-5">  
  <div class="row">  
    <div class="col-md-6">  
      <div class="form-group">  
        <label for="datetimepicker">选择日期时间</label>  
        <div class="input-group date" id="datetimepicker">  
          <input type="text" class="form-control" />  
          <span class="input-group-addon">  
            <span class="glyphicon glyphicon-calendar"></span>  
          </span>  
        </div>  
      </div>  
    </div>  
  </div>  
</div>  

2.3 初始化 DateTimePicker

在 JavaScript 中初始化组件:

$(function () {  
  $('#datetimepicker').datetimepicker({  
    format: 'YYYY-MM-DD HH:mm' // 设置日期时间格式  
  });  
});  

注意:如果使用 jQuery 版本低于 3.0,需确保已正确引入 jQuery 库。


三、核心配置选项详解

DateTimePicker 的强大功能主要通过配置参数实现。以下是一些常用配置项的示例:

3.1 基础配置

参数名描述示例值
format设置日期时间的显示格式'YYYY-MM-DD HH:mm'
locale设置语言(如中文 zh-CN'zh-CN'
minDate设置最小可选日期moment().subtract(1, 'days')
maxDate设置最大可选日期moment().add(7, 'days')
disabledDates禁用特定日期列表[moment('2023-10-01')]

3.2 高级配置

  • 时间间隔控制:通过 stepping 参数设置时间选择的步长(例如每 15 分钟一次):

    stepping: 15 // 时间选择器以 15 分钟为步长  
    
  • 自定义日期范围:结合 useCurrentkeepOpen 控制用户体验:

    useCurrent: false // 禁用默认选中当前时间  
    keepOpen: true    // 选择后保持弹窗打开  
    

四、事件监听与交互逻辑

DateTimePicker 提供了多种事件,用于在用户选择日期时间时触发自定义逻辑。常见事件包括:

4.1 监听日期变化

$('#datetimepicker').on('dp.change', function (e) {  
  const selectedDate = e.date.format('YYYY-MM-DD HH:mm');  
  console.log('用户选择了:', selectedDate);  
  // 可在此处添加其他业务逻辑,如更新表单或提交数据  
});  

4.2 根据日期动态更新其他字段

假设需要根据选择的日期动态计算价格:

$('#datetimepicker').on('dp.change', function (e) {  
  const selectedDate = e.date;  
  const price = calculatePrice(selectedDate); // 假设存在该函数  
  $('#price-display').text(`总价:${price} 元`);  
});  

五、进阶用法与实战案例

5.1 中文语言支持

通过配置 locale 参数实现中文显示:

$('#datetimepicker').datetimepicker({  
  locale: 'zh-CN' // 使用中文  
});  

5.2 日期时间范围选择

允许用户选择日期范围(如起始时间与结束时间):

<!-- HTML 结构 -->  
<div class="input-group date" id="datetimepicker-range">  
  <input type="text" class="form-control" readonly>  
  <span class="input-group-addon">至</span>  
  <input type="text" class="form-control" readonly>  
</div>  

<script>  
$(function () {  
  $('#datetimepicker-range').datetimepicker({  
    format: 'YYYY-MM-DD',  
    locale: 'zh-CN',  
    useCurrent: false // 禁用默认选中当前时间  
  });  
  // 同步两个输入框的日期选择  
  $("#datetimepicker-range").on("dp.change", function (e) {  
    let start = $('#datetimepicker-range input:first').data('date');  
    let end = $('#datetimepicker-range input:last').data('date');  
    if (start && end) {  
      if (start > end) {  
        alert('结束日期不能早于起始日期!');  
      }  
    }  
  });  
});  
</script>  

5.3 结合表单验证

在表单提交前验证日期是否符合要求:

function validateForm() {  
  const datePicker = $('#datetimepicker').data('datetimepicker');  
  const selectedDate = datePicker.date();  
  const minDate = moment().subtract(1, 'days');  
  if (selectedDate.isBefore(minDate)) {  
    alert('请选择未来日期!');  
    return false;  
  }  
  return true;  
}  

六、常见问题与解决方案

6.1 日期格式显示不正确

问题:输出的日期格式与配置不符。
解决方法:检查 format 参数是否与 Moment.js 的格式语法一致。例如,YYYY 表示四位年份,MM 表示两位月份,DD 表示两位日期。

6.2 中文语言包未生效

问题:设置了 locale: 'zh-CN' 但显示仍为英文。
解决方法:确保已引入对应的语言包文件。例如:

// 在初始化前加载中文语言包  
$.getScript('https://cdn.jsdelivr.net/npm/eonasdan-bootstrap-datetimepicker@4.17.49/src/locales/bootstrap-datetimepicker.zh-CN.js');  

6.3 时间选择器无法弹出

问题:点击输入框后没有弹出日期选择面板。
解决方法:检查依赖库是否正确加载,尤其是 Moment.js 和 Bootstrap 的版本兼容性。


七、最佳实践与性能优化

7.1 减少 DOM 查询

避免在事件监听中频繁使用 $() 查询元素,可通过缓存引用提升性能:

const $datetimepicker = $('#datetimepicker');  
$datetimepicker.datetimepicker();  
// 后续操作直接使用 $datetimepicker  

7.2 延迟初始化

在页面加载完成后初始化组件,避免阻塞其他操作:

$(document).ready(function () {  
  // 初始化 DateTimePicker  
});  

7.3 限制日期范围

通过 minDatemaxDate 参数减少用户选择的无效选项,提升交互效率:

minDate: moment().startOf('day'), // 今日零时起  
maxDate: moment().add(30, 'days')  

八、总结与展望

Bootstrap DateTimePicker 凭借其简洁的 API 和丰富的配置选项,成为 Web 开发中处理日期时间选择的利器。无论是基础的单日期选择,还是复杂的多语言支持和范围选择场景,它都能提供高效且直观的解决方案。对于开发者而言,掌握其核心配置、事件机制以及常见问题的排查方法,是快速集成该组件的关键。

未来,随着前端技术的演进,DateTimePicker 也可能会进一步优化移动端适配、响应式设计等功能。但无论技术如何变化,理解其底层逻辑和核心思想,始终是开发者应对复杂需求的基础。


扩展阅读

通过本文的学习,希望读者能够掌握 Bootstrap DateTimePicker 的核心功能,并在实际项目中灵活运用其特性,提升用户的交互体验。

最新发布