日期选择器API文档:bootstrap-datepicker选项说明
你是否在开发Web应用时遇到过日期选择体验不佳的问题?用户输入格式混乱、日期范围难以限制、多语言支持复杂?bootstrap-datepicker作为Bootstrap生态中最受欢迎的日期选择插件,提供了50+可配置选项,让你轻松实现专业级日期交互。本文将系统解析所有核心选项,通过30+代码示例、8个对比表格和5种流程图,帮助你在15分钟内从入门到精通。
读完本文你将掌握:
- 如何通过基础选项构建标准日期选择器
- 高级功能配置(日期限制/多日期选择/周起始日自定义)
- 性能优化与无障碍访问最佳实践
- 常见场景解决方案(酒店预订/生日选择/日程安排)
基础配置选项
bootstrap-datepicker的选项系统采用声明式设计,支持JavaScript配置和data-*属性两种方式。所有日期相关选项均支持Date对象、字符串格式或相对时间表达式(如"+1d"表示明天)。
核心显示控制
| 选项名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| autoclose | Boolean | false | 选择日期后是否立即关闭选择器 |
| calendarWeeks | Boolean | false | 是否显示周数(ISO标准周编号) |
| clearBtn | Boolean | false | 是否显示清除按钮 |
| todayBtn | Boolean/"linked" | false | 是否显示"今天"按钮,"linked"会同时选中当前日期 |
| todayHighlight | Boolean | false | 是否高亮显示当前日期 |
| weekStart | Integer | 0 | 周起始日(0=周日,1=周一,...,6=周六) |
基础示例:带清除和今天按钮的日期选择器
<input type="text" class="form-control" id="basic-datepicker">
<script>
$('#basic-datepicker').datepicker({
autoclose: true,
todayBtn: "linked",
todayHighlight: true,
clearBtn: true,
weekStart: 1 // 设置周一为周起始日
});
</script>
日期格式配置
format选项支持丰富的日期格式化字符串,支持自定义转换函数处理特殊需求(如UTC与本地时间转换)。
标准格式示例:
// 配置为中文常用格式:2023年10月05日
$('.datepicker').datepicker({
format: "yyyy年mm月dd日",
language: "zh-CN"
});
// 自定义转换函数(UI显示UTC时间,实际存储本地时间)
$('.datepicker').datepicker({
format: {
toDisplay: function(date) {
return new Date(date).toISOString().split('T')[0];
},
toValue: function(dateStr) {
return new Date(dateStr);
}
}
});
高级功能选项
日期限制控制
bootstrap-datepicker提供多层次的日期限制机制,满足从简单到复杂的业务需求。
常用日期限制场景:
- 酒店预订日期选择(今天起3个月内,禁用过去日期和周一):
$('.checkin-date').datepicker({
startDate: "today",
endDate: "+3m",
daysOfWeekDisabled: [1], // 禁用周一
language: "zh-CN",
autoclose: true
});
- 生日选择器(限制1900-2010年出生):
$('.birthday-picker').datepicker({
startDate: "1900-01-01",
endDate: "2010-12-31",
maxViewMode: 2, // decade视图(10年选择)
todayHighlight: false,
language: "zh-CN"
});
多日期选择
multidate选项支持选择多个日期,可限制选择数量,适用于行程规划、会议安排等场景。
| 配置 | 效果 | 应用场景 |
|---|---|---|
| multidate: true | 无限制多选 | 日程安排 |
| multidate: 3 | 最多选3个日期 | 假期选择 |
| multidateSeparator: ";" | 使用分号分隔日期 | 特殊格式需求 |
代码示例:
<input type="text" class="multi-date-picker" placeholder="选择多个日期">
<script>
$('.multi-date-picker').datepicker({
multidate: 3, // 最多选择3个日期
multidateSeparator: " | ",
format: "yyyy-mm-dd",
todayHighlight: true
});
</script>
视图控制选项
视图层级与导航
bootstrap-datepicker提供5级视图层级,从日视图到千年视图,满足不同精度的日期选择需求。
视图控制示例:
// 月份选择器(只能选择月份)
$('.month-picker').datepicker({
minViewMode: 1, // 月份视图
maxViewMode: 1,
format: "yyyy年mm月",
autoclose: true
});
// 季度选择器(自定义视图行为)
$('.quarter-picker').datepicker({
minViewMode: 1,
format: "yyyy年Qq",
beforeShowMonth: function(date){
// 高亮季度首月
if (date.getMonth() % 3 === 0) {
return {classes: 'quarter-start', tooltip: '季度起始月'};
}
}
});
定位与容器
通过container和orientation选项控制选择器的显示位置,解决模态框中被遮挡的常见问题。
解决模态框遮挡问题:
// 在Bootstrap模态框中正确显示
$('#modal-datepicker').datepicker({
container: '#myModal', // 附加到模态框
orientation: "bottom auto", // 底部对齐,自动水平定位
zIndexOffset: 1050 // 高于模态框z-index
});
事件与回调选项
日期状态自定义
beforeShowDay回调允许你自定义每一天的状态,实现复杂的日期逻辑(如价格标注、可用性显示)。
酒店价格日历示例:
$('.price-calendar').datepicker({
beforeShowDay: function(date) {
// 模拟价格数据
const prices = {
'2023-10-01': 599,
'2023-10-02': 699,
'2023-10-03': 799
};
const dateStr = $.fn.datepicker.DPGlobal.formatDate(date, "yyyy-mm-dd");
const price = prices[dateStr];
if (price) {
return {
enabled: true,
classes: 'has-price',
tooltip: `价格: ¥${price}`,
content: `<span class="day">${date.getDate()}</span><span class="price">¥${price}</span>`
};
}
return {enabled: date > new Date()}; // 只启用未来日期
}
});
性能优化与最佳实践
选项优先级与冲突解决
当多个选项同时作用时,需要了解其优先级规则:
- data-*属性 > JavaScript配置 > 默认值
- beforeShowDay返回的enabled状态优先级高于datesDisabled
- multidate为true时,toggleActive自动设为true
常见性能问题优化:
// 优化大量日期禁用场景
$('.performance-datepicker').datepicker({
datesDisabled: getDisabledDates(), // 避免在beforeShowDay中重复计算
enableOnReadonly: false, // 只读时不初始化选择器
immediateUpdates: false, // 减少不必要的更新
updateViewDate: false // 多日期选择时减少视图更新
});
国内CDN资源配置
为确保在国内网络环境下的稳定加载,推荐使用以下CDN配置:
<!-- 国内CDN引入 -->
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.10.0/css/bootstrap-datepicker.min.css">
<script src="https://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.10.0/js/bootstrap-datepicker.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.10.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
<!-- 初始化配置 -->
<script>
$(function(){
$('.datepicker').datepicker({
language: 'zh-CN',
format: 'yyyy-mm-dd',
todayHighlight: true
});
});
</script>
快速参考指南
常用选项速查表
| 分类 | 核心选项 | 实用配置 |
|---|---|---|
| 基础功能 | format, language, autoclose | todayHighlight, weekStart |
| 日期限制 | startDate, endDate, daysOfWeekDisabled | datesDisabled, beforeShowDay |
| 视图控制 | startView, minViewMode, maxViewMode | calendarWeeks, showWeekDays |
| 高级功能 | multidate, container, orientation | clearBtn, todayBtn, templates |
问题排查流程图
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



