Tempus Dominus 日期时间选择器 v6.10.4

Bootstrap 官方没有提供日期选择组件,Tempus Dominus 是社区主流替代:日历 + 时钟、日期范围、最小/最大日期限制、中文本地化一应俱全。v6 为原生 JavaScript 编写,不依赖 jQuery,可直接配合 Bootstrap 5.3 使用。

官方对照

先看 Bootstrap 官方能做什么、本库补齐了什么。

官方没有
对比维度Bootstrap 官方Tempus Dominus
能力定位 仅提供原生 <input type="date"> 输入框,样式随浏览器渲染,各端外观不统一 功能完整的弹出式日期/时间/范围选择器,外观跨浏览器一致
核心特性 无额外 API,无范围选择、无时间选择、无禁用日期 日历 + 时钟、日期范围(dateRange)、minDate/maxDate 限制、本地化、键盘导航、今天/清除快捷按钮
依赖与体积 零依赖 仅依赖 @popperjs/core 做弹出定位,单文件约 50KB(gzip 后更小)
适用场景 对外观无要求的简单原生日期录入 后台表单、预约系统、报表筛选等需要精确日期时间与中文界面的场景
与 Bootstrap 5.3 原生支持 v6 原生支持 Bootstrap 5.x,不依赖 jQuery;下方示例真实运行
对照表说明
结论:Bootstrap 官方「没有」日期选择器组件,需要选择器时选用 Tempus Dominus 等第三方库;
若只接受原生体验,可使用 <input type="date">,但需自行接受各浏览器样式不一致的代价。

引入方式

通过 jsDelivr 固定版本引入:样式放 <head>,脚本放 <body> 末尾。注意依赖顺序:先 Popper,再 Tempus Dominus 本体,最后是中文语言包;语言包注册的 zh-CN locale 需要在初始化时通过 localization.locale 启用。本站 Bootstrap bundle 已内置 Popper,但本页仍单独显式引入 @popperjs/core 以保证自包含。

引入代码
<!-- Bootstrap CSS(本站统一 5.3.8) -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet">

<!-- Tempus Dominus 样式 -->
<link href="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.10.4/dist/css/tempus-dominus.min.css" rel="stylesheet">

<!-- 依赖:Popper(弹出层定位) -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"></script>

<!-- Tempus Dominus 本体 + 中文语言包 -->
<script src="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.10.4/dist/js/tempus-dominus.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.10.4/dist/locales/zh-CN.js"></script>

基础示例

用 new tempusDominus.TempusDominus(element, options) 初始化包裹在 .input-group 里的容器;点击输入框即弹出日历,右侧按钮可手动切换弹出层。日历底部提供「今天 / 清除 / 关闭」快捷按钮。

HTML + 初始化 JS
<div class="input-group" id="td-basic">
  <input type="text" class="form-control" placeholder="点击选择日期时间">
  <button class="btn btn-outline-secondary" type="button" id="td-basic-toggle">切换日历</button>
</div>

<script>
var td = new tempusDominus.TempusDominus(document.getElementById('td-basic'), {
  localization: { locale: 'zh-CN' },
  display: {
    buttons: { today: true, clear: true, close: true }
  }
});
document.getElementById('td-basic-toggle').addEventListener('click', function () {
  td.toggle();   // 手动弹出 / 收起日历
});
</script>

日期时间与范围选项

把 dateRange 设为 true 即变为起止日期范围选择器;restrictions.minDate 限制只能选今天之后;display.components.clock 设为 false 可隐藏时钟只保留日期。

HTML + 初始化 JS
<div class="input-group" id="td-range">
  <input type="text" class="form-control" placeholder="选择开始日期 — 结束日期">
</div>

<script>
new tempusDominus.TempusDominus(document.getElementById('td-range'), {
  localization: { locale: 'zh-CN' },
  dateRange: true,                            // 启用日期范围
  restrictions: { minDate: new Date() },      // 今天之前不可选
  display: {
    components: { clock: false }              // 只选日期,不选时间
  }
});
</script>