基于bootstrap按年、季度、年月、年月日的日历插件

基于bootstrap按年、季度、年月、年月日的日历插件,作为bootstrap-datetimepicker日历插件的扩展

可按年

按季度

按年月

按年月日

进阶:可以根据前面按年  季度 年月 ,  后面的日历控件显示对应的日历选项

 

使用方法

1-依赖的CSS与JS

CSS:bootstrap.min.css    bootstrap-datetimepicker.min.css   yk-datepicker.css

JS:jquery-1.8.3.min.js     bootstrap.min.js    bootstrap-datetimepicker.js    yk-datepicker.min.js

2-HTML代码:下面只写一个按年的为例

            <div class="form-group">
                <label for="dtp_input3" class="col-md-2 control-label">年</label>
                <div class="input-group date col-md-5" data-date="" data-date-format="hh:ii" data-link-field="dtp_input3" data-link-format="hh:ii">
                    <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
                    <input class="form-control form_Y" size="16" type="text" value="" readonly>
                </div>
                <input type="hidden" id="dtp_input3" value="" /><br/>
            </div>

3-JS代码:

// 按年

    $('.form_Y').getY().on('changeDate', function(event) {
        event.preventDefault();
        event.stopPropagation();
    });

// 按季度
    $('.form_QT').getQT().on('changeDate', function(event) {
        event.preventDefault();
        event.stopPropagation();
    });

// 按年月
    $('.form_YM').getYM().on('changeDate', function(event) {
        event.preventDefault();
        event.stopPropagation();
    });

// 按年月日
    $('.form_YMD').getYMD().on('changeDate', function(event) {
        event.preventDefault();
        event.stopPropagation();
    });

完整可运行的demo代码已上传

https://download.csdn.net/download/yank1225/12645825

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是一个完整的案例,基于Bootstrap-datepicker插件实现了按年季度、周、日不同类型的日期选择器: ```html <!DOCTYPE html> <html> <head> <title>日期选择器</title> <!-- 引入Bootstrap的CSS文件 --> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css"> <!-- 引入Bootstrap-datepicker的CSS和JS文件 --> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker.min.css"> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script> </head> <body> <div class="container"> <h1>日期选择器</h1> <div class="form-group"> <label>按年选择:</label> <input type="text" class="form-control" id="yearpicker"> </div> <div class="form-group"> <label>按季度选择:</label> <input type="text" class="form-control" id="quarterpicker"> </div> <div class="form-group"> <label>按选择:</label> <input type="text" class="form-control" id="monthpicker"> </div> <div class="form-group"> <label>按周选择:</label> <input type="text" class="form-control" id="weekpicker"> </div> <div class="form-group"> <label>按日选择:</label> <input type="text" class="form-control" id="daypicker"> </div> </div> <script> $(function() { // 初始化按年选择的日期选择器 $('#yearpicker').datepicker({ format: 'yyyy', autoclose: true, startView: 2, minViewMode: 'years' }); // 初始化按季度选择的日期选择器 $('#quarterpicker').datepicker({ format: 'yyyy-q', autoclose: true, startView: 2, minViewMode: 'months', beforeShow: function(input) { // 将季度选择器的初始值设置为当前季度 var date = new Date(); var quarter = Math.floor((date.getMonth() / 3)); var year = date.getFullYear(); $(this).datepicker('update', year + '-' + (quarter + 1)); }, beforeShowDay: function(date) { // 设置季度选择器的可选日期范围为当前份的所有季度 var year = date.getFullYear(); var quarter = Math.floor((date.getMonth() / 3)) + 1; return [(quarter === 1 || quarter === 2 || quarter === 3 || quarter === 4) && (year >= (new Date()).getFullYear() - 3) && (year <= (new Date()).getFullYear() + 1)]; }, startDate: '-3y', endDate: '+1y' }); // 初始化按选择的日期选择器 $('#monthpicker').datepicker({ format: 'yyyy-mm', autoclose: true, startView: 2, minViewMode: 'months', beforeShow: function(input) { // 将选择器的初始值设置为当前份 var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; $(this).datepicker('update', year + '-' + (month < 10 ? '0' + month : month)); }, beforeShowDay: function(date) { // 设置选择器的可选日期范围为当前份的所有份 var year = date.getFullYear(); var month = date.getMonth() + 1; return [(year >= (new Date()).getFullYear() - 3) && (year <= (new Date()).getFullYear() + 1)]; }, startDate: '-3y', endDate: '+1y' }); // 初始化按周选择的日期选择器 $('#weekpicker').datepicker({ format: 'yyyy-mm-dd', autoclose: true, startView: 1, minViewMode: 'days', beforeShow: function(input) { // 将周选择器的初始值设置为当前日期所在的周 var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); var week = getWeekNumber(date); var weekStart = getWeekStartDate(year, week); var weekEnd = getWeekEndDate(year, week); $(this).datepicker('update', weekStart.getFullYear() + '-' + (weekStart.getMonth() < 9 ? '0' + (weekStart.getMonth() + 1) : (weekStart.getMonth() + 1)) + '-' + (weekStart.getDate() < 10 ? '0' + weekStart.getDate() : weekStart.getDate()) + ' - ' + weekEnd.getFullYear() + '-' + (weekEnd.getMonth() < 9 ? '0' + (weekEnd.getMonth() + 1) : (weekEnd.getMonth() + 1)) + '-' + (weekEnd.getDate() < 10 ? '0' + weekEnd.getDate() : weekEnd.getDate())); }, beforeShowDay: function(date) { // 设置周选择器的可选日期范围为当前份的所有周 var year = date.getFullYear(); var week = getWeekNumber(date); return [(year >= (new Date()).getFullYear() - 3) && (year <= (new Date()).getFullYear() + 1)]; }, startDate: '-3y', endDate: '+1y' }); // 初始化按日选择的日期选择器 $('#daypicker').datepicker({ format: 'yyyy-mm-dd', autoclose: true, startView: 0, minViewMode: 'days', beforeShowDay: function(date) { // 设置日选择器的可选日期范围为当前份的所有日期 var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); return [(year >= (new Date()).getFullYear() - 3) && (year <= (new Date()).getFullYear() + 1)]; }, startDate: '-3y', endDate: '+1y' }); }); // 获取指定日期所在的周数 function getWeekNumber(date) { var d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())); var dayNum = d.getUTCDay() || 7; d.setUTCDate(d.getUTCDate() + 4 - dayNum); var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1)); return Math.ceil((((d - yearStart) / 86400000) + 1)/7); } // 获取指定份和周数的第一天 function getWeekStartDate(year, week) { var d = new Date(); d.setFullYear(year, 0, 1); var day = d.getDay(); var diff = (day === 0 ? 7 : day) - 1; var firstMonday = new Date(d.getTime() - (diff * 24 * 60 * 60 * 1000)); var val = new Date(firstMonday.getTime()); val.setDate(firstMonday.getDate() + ((week - 1) * 7)); return val; } // 获取指定份和周数的最后一天 function getWeekEndDate(year, week) { var d = new Date(); d.setFullYear(year, 0, 1); var day = d.getDay(); var diff = (day === 0 ? 7 : day) - 1; var firstMonday = new Date(d.getTime() - (diff * 24 * 60 * 60 * 1000)); var val = new Date(firstMonday.getTime()); val.setDate(firstMonday.getDate() + ((week - 1) * 7) + 6); return val; } </script> </body> </html> ``` 在此代码中,我们使用了Bootstrap-datepicker插件,并在页面中创建了5个不同类型的日期选择器,分别是按年选择、按季度选择、按选择、按周选择和按日选择。对于不同类型的日期选择器,我们根据需求调整了一些配置选项,比如日期格式、初始视图、最小视图、可选日期范围等等。同时,我们还编写了一些辅助函数,以便于获取指定日期所在的周数、获取指定份和周数的第一天和最后一天。希望这个完整案例能够帮到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值