bootstrap-datetimepicker添加支持显示农历节假日信息。

话不多说先上效果图。

这里写图片描述
最近再使用日期选择器发现没有显示农历的相关插件,于是网上找了一下有一些是独立的简单插件。最后干脆自己来修改bootstrap-datetimepicker

通过浏览器移动到日期位置右键审查元素查看源代码
这里写图片描述
class 是day 或 today 所以打开bootstrap-datetimepicker.js 搜索 ‘today’
这里写图片描述

这里附近应该就是渲染日历的地方,所以我们就在附近找。

html.push(‘’ + prevMonth.getUTCDate()+’‘);
这里这段应该就是渲染日历的地方,我们可以删掉试试,如果日期选择没日历就代表是这段。

那么其实我们只要在这里添加个P标签来显示农历和节假日就行了。

下面贴出计算节假日与万年历的代码

var S=navigator.userAgent.indexOf("MSIE")!=-1&&!window.opera;
function M(C){
    return document.getElementById(C)
} function R(C){
    return document.createElement(C)
} var P=[19416,19168,42352,21717,53856,55632,91476,22176,39632,21970,19168,42422,42192,53840,119381,46400,54944,44450,38320,84343,18800,42160,46261,27216,27968,109396,11104,38256,21234,18800,25958,54432,59984,28309,23248,11104,100067,37600,116951,51536,54432,120998,46416,22176,107956,9680,37584,53938,43344,46423,27808,46416,86869,19872,42448,83315,21200,43432,59728,27296,44710,43856,19296,43748,42352,21088,62051,55632,23383,22176,38608,19925,19152,42192,54484,53840,54616,46400,46496,103846,38320,18864,43380,42160,45690,27216,27968,44870,43872,38256,19189,18800,25776,29859,59984,27480,21952,43872,38613,37600,51552,55636,54432,55888,30034,22176,43959,9680,37584,51893,43344,46240,47780,44368,21977,19360,42416,86390,21168,43312,31060,27296,44368,23378,19296,42726,42208,53856,60005,54576,23200,30371,38608,19415,19152,42192,118966,53840,54560,56645,46496,22224,21938,18864,42359,42160,43600,111189,27936,44448];
var K="甲乙丙丁戊己庚辛壬癸";
var J="子丑寅卯辰巳午未申酉戌亥";
var O="鼠牛虎兔龙蛇马羊猴鸡狗猪";
var L=["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"];
var D=[0,21208,43467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758];
var B="日一二三四五六七八九十";
var H=["正","二","三","四","五","六","七","八","九","十","十一","腊"];
var E="初十廿卅";
var V={
    "0101":"*1元旦节","0214":"情人节","0305":"学雷锋纪念日","0308":"妇女节","0312":"植树节","0315":"消费者权益日","0401":"愚人节","0501":"*1劳动节","0504":"青年节","0601":"国际儿童节","0701":"中国共产党诞辰","0801":"建军节","0910":"中国教师节","1001":"*3国庆节","1224":"平安夜","1225":"圣诞节"
} ;
var T={
    "0101":"*2春节","0115":"元宵节","0505":"*1端午节","0815":"*1中秋节","0909":"重阳节","1208":"腊八节","0100":"除夕"
} ;
function U(Y){
    function c(j,i){
        var h=new Date((31556925974.7*(j-1900)+D[i]*60000)+Date.UTC(1900,0,6,2,5));
        return(h.getUTCDate())
    } function d(k){
        var h,j=348;
        for(h=32768;h>8;h>>=1){
            j+=(P[k-1900]&h)?1:0
        } return(j+b(k))
    } function a(h){
        return(K.charAt(h%10)+J.charAt(h%12))
    } function b(h){
        if(g(h)){
            return((P[h-1900]&65536)?30:29)
        } else{
            return(0)
        }
    } function g(h){
        return(P[h-1900]&15)
    } function e(i,h){
        return((P[i-1900]&(65536>>h))?30:29)
    } function C(m){
        var k,j=0,h=0;
        var l=new Date(1900,0,31);
        var n=(m-l)/86400000;
        this.dayCyl=n+40;
        this.monCyl=14;
        for(k=1900;k<2050&&n>0;k++){
            h=d(k);
            n-=h;
            this.monCyl+=12
        } if(n<0){
            n+=h;
            k--;
            this.monCyl-=12
        } this.year=k;
        this.yearCyl=k-1864;
        j=g(k);
        this.isLeap=false;
        for(k=1;k<13&&n>0;k++){
            if(j>0&&k==(j+1)&&this.isLeap==false){
                --k;
                this.isLeap=true;
                h=b(this.year)
            } else{
                h=e(this.year,k)
            } if(this.isLeap==true&&k==(j+1)){
                this.isLeap=false
            } n-=h;
            if(this.isLeap==false){
                this.monCyl++
            }
        } if(n==0&&j>0&&k==j+1){
            if(this.isLeap){
                this.isLeap=false
            } else{
                this.isLeap=true;
                --k;
                --this.monCyl
            }
        } if(n<0){
            n+=h;
            --k;
            --this.monCyl
        } this.month=k;
        this.day=n+1
    } function G(h){
        return h<10?"0"+h:h
    } function f(i,j){
        var h=i;
        return j.replace(/dd?d?d?|MM?M?M?|yy?y?y?/g,function(k){
            switch(k){
                case"yyyy":var l="000"+h.getFullYear();
                    return l.substring(l.length-4);
                case"dd":
                    return G(h.getDate());
                case"d":
                    return h.getDate().toString();
                case"MM":
                    return G((h.getMonth()+1));
                case"M":
                    return h.getMonth()+1
                        }
                    } )
    } function Z(i,h){
        var j;
        switch(i,h){
            case 10:j="初十";
                break;
            case 20:j="二十";
                break;
            case 30:j="三十";
                break;
            default:j=E.charAt(Math.floor(h/10));
                j+=B.charAt(h%10)
        } return(j)
    } this.date=Y;
    this.solarYear=f(Y,"yyyy");
    this.solarMonth=f(Y,"M");
    this.solarDate=f(Y,"d");
    this.solarWeekDay=Y.getDay();
    this.solarWeekDayInChinese="星期"+B.charAt(this.solarWeekDay);
    var X=new C(Y);
    this.lunarYear=X.year;
    this.shengxiao=O.charAt((this.lunarYear-4)%12);
    this.lunarMonth=X.month;
    this.lunarIsLeapMonth=X.isLeap;
    this.lunarMonthInChinese=this.lunarIsLeapMonth?"闰"+H[X.month-1]:H[X.month-1];
    this.lunarDate=X.day;
    this.showInLunar=this.lunarDateInChinese=Z(this.lunarMonth,this.lunarDate);
    if(this.lunarDate==1){
        this.showInLunar=this.lunarMonthInChinese+"月"
    } this.ganzhiYear=a(X.yearCyl);
    this.ganzhiMonth=a(X.monCyl);
    this.ganzhiDate=a(X.dayCyl++);
    this.jieqi="";
    this.restDays=0;
    if(c(this.solarYear,(this.solarMonth-1)*2)==f(Y,"d")){
        this.showInLunar=this.jieqi=L[(this.solarMonth-1)*2]
    } if(c(this.solarYear,(this.solarMonth-1)*2+1)==f(Y,"d")){
        this.showInLunar=this.jieqi=L[(this.solarMonth-1)*2+1]
    } if(this.showInLunar=="清明"){
        this.showInLunar="清明节";
        this.restDays=1
    } this.solarFestival=V[f(Y,"MM")+f(Y,"dd")];
    if(typeof this.solarFestival=="undefined"){
        this.solarFestival=""
    } else{
        if(/\*(\d)/.test(this.solarFestival)){
            this.restDays=parseInt(RegExp.$1);
            this.solarFestival=this.solarFestival.replace(/\*\d/,"")
        }
    } this.showInLunar=(this.solarFestival=="")?this.showInLunar:this.solarFestival;
    var tIndex=this.lunarIsLeapMonth?"00":G(this.lunarMonth)+G(this.lunarDate);
    if(Object.prototype.toString.call(tIndex) === "[object String]" && tIndex.indexOf("."))
        tIndex=tIndex.substring(0,tIndex.indexOf("."));
    this.lunarFestival=T[tIndex];
    if(typeof this.lunarFestival=="undefined"){
        this.lunarFestival=""
    } else{
        if(/\*(\d)/.test(this.lunarFestival)){
            this.restDays=(this.restDays>parseInt(RegExp.$1))?this.restDays:parseInt(RegExp.$1);
            this.lunarFestival=this.lunarFestival.replace(/\*\d/,"")
        }
    } if(this.lunarMonth==12&&this.lunarDate==e(this.lunarYear,12)){
        this.lunarFestival=T["0100"];
        this.restDays=1
    } this.showInLunar=(this.lunarFestival=="")?this.showInLunar:this.lunarFestival;
    this.showInLunar=(this.showInLunar.length>4)?this.showInLunar.substr(0,2)+"...":this.showInLunar
} var Q=(function(){
    var X={
    } ;
    X.lines=0;
    X.dateArray=new Array(42);
    function Y(a){
        return(((a%4===0)&&(a%100!==0))||(a%400===0))
    } function G(a,b){
        return[31,(Y(a)?29:28),31,30,31,30,31,31,30,31,30,31][b]
    } function C(a,b){
        a.setDate(a.getDate()+b);
        return a
    } function Z(a){
        var f=0;
        var c=new U(new Date(a.solarYear,a.solarMonth-1,1));
        var d=(c.solarWeekDay-1==-1)?6:c.solarWeekDay-1;
        X.lines=Math.ceil((d+G(a.solarYear,a.solarMonth-1))/7);
        for(var e=0;e<X.dateArray.length;e++){
            if(c.restDays!=0){
                f=c.restDays
            } if(f>0){
                c.isRest=true
            } if(d-->0||c.solarMonth!=a.solarMonth){
                X.dateArray[e]=null;
                continue
            } var b=new U(new Date());
            if(c.solarYear==b.solarYear&&c.solarMonth==b.solarMonth&&c.solarDate==b.solarDate){
                c.isToday=true
            } X.dateArray[e]=c;
            c=new U(C(c.date,1));
            f--
        }
    } return{
        init:function(a){
            Z(a)
        } ,getJson:function(){
            return X
        }
    }
} )();

看不懂没关系会用就行,下面就使用例子
var c=new U(date);
//输出当前节假日信息或农历,如果是节假日会节假日如果没有就是农历
console.log(c.showInLunar);
//输出当前节假日信息或农历,如果是节假日会节假日如果没有就是农历,超过三个字会以 ..来显示 因为我们日历界面大小是有限制的所以超过的要省略
console.log(c.showInLunar);
//输出当前节假日信息或农历不会省略
console.log(c.lunarFestival);
//其他信息大家可以输出对象来查看
console.log(c);

下面开始为日历加上农历以及节假日信息吧。

 html.push('<td class="' + classes.join(' ') + '">' + prevMonth.getUTCDate()+'</td>');

把原来渲染的代码改成下面这段代码

//获取当前时间详细信息包括节日信息
var c=new U(prevMonth);
var ct="农历&nbsp;"+c.lunarMonthInChinese+"月"+c.lunarDateInChinese+"&nbsp;" + c.solarFestival + c.lunarFestival;
        html.push('<td class="' + classes.join(' ') + '">' + prevMonth.getUTCDate()+'<br><p  title='+ct+'>'+c.showInLunar + '</p></td>');

这样就可以显示农历了

我们还得修改下样式把大小调大点,还有给农历添加一些样式。

.table-condensed>tbody>tr>td{
    padding: 1px;
}
.datetimepicker table tr td.active p{
    color: #fff;
}
.datetimepicker  td,
.datetimepicker th {
    width: 50px;
}
.datetimepicker table tr td.old p,
.datetimepicker table tr td.new p{
    color: #999999;
}

最后还得修改下显示的天数

nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);

修改成

nextMonth.setUTCDate(nextMonth.getUTCDate() + 35);

因为加上农历,时间选择器大小会变得很大所以我们要修改下渲染天数。

这样就大功告成了。

为了让大家更方便的使用我把这个封装为插件大家只要引入

bootstrap-datetimepicker.lunar.css
bootstrap-datetimepicker.lunar.js
就行了

<!--农历插件-->
<script src="../assets/datetimepicker/locales/bootstrap-datetimepicker.lunar.js"></script>
    <link href="../assets/datetimepicker/locales/bootstrap-datetimepicker.lunar.css" rel="stylesheet">

下载地址:

http://download.csdn.net/download/asd8510678/9756163

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
### 回答1: bootstrap-datetimepicker是一个可定制的日期选择器插件,可以帮助我们在网页中添加日期选择功能。它使用了Bootstrap风格的样式,并提供了丰富的选项和配置来满足不同的需求。 通过bootstrap-datetimepicker,我们可以轻松地自定义日期样式。首先,我们可以选择不同的主题来改变整体的样式,例如light主题和dark主题。其次,我们可以设置日期选择框的大小和位置,以适应不同的布局。还可以设置日期的格式,包括年月日、时分秒等不同精度。此外,我们还可以设置各个部分的颜色和字体样式,以满足个性化的需求。 除了基本的样式设置外,bootstrap-datetimepicker还提供了其他一些高级功能来增强用户体验。例如,我们可以设置日期范围限制,禁止选择过去的日期或将来的日期。还可以设置起始日期和结束日期,限制用户只能在指定的时间选择日期。此外,我们可以使用快速选择按钮,让用户可以一键选择最近几天、最近几个月或最近几年的日期。 总之,bootstrap-datetimepicker通过提供丰富的选项和配置,可以帮助我们设计出符合我们需求的日期样式。无论是简单的日期选择功能还是复杂的日期范围限制,bootstrap-datetimepicker都能满足我们的需求,并且具有良好的用户体验。 ### 回答2: bootstrap-datetimepicker是一个基于Bootstrap框架的日期选择器插件。它提供了丰富的日期样式供用户选择。 首先,bootstrap-datetimepicker支持多种日期格式。你可以通过配置选项来指定日期的显示格式,例如:"yyyy-mm-dd"表示日期以年-月-日的形式显示,"dd/mm/yyyy"则表示日期以日/月/年的形式显示。 其次,该插件还支持时间选择。你可以选择是否显示时间,以及时间显示格式。比如,你可以使用"hh:ii"来显示小时和分钟,或者使用"hh:ii:ss"来显示小时、分钟和秒。 此外,bootstrap-datetimepicker还具有一些其他的日期样式设置。其中包括: 1. 可以设置日期的起始和结束范围,限定用户只能选择某个范围内的日期。 2. 可以设置日期的禁用状态,禁止用户选择某些特定日期。 3. 可以设置日期的选择模式,包括单个日期选择、多个日期选择以及范围选择等。 最后,bootstrap-datetimepicker还提供了丰富的自定义选项,你可以根据自己的需求来定义日期的样式。比如,你可以修改日期选择器的主题颜色、字体样式、边框样式等。 总的来说,bootstrap-datetimepicker提供了许多灵活的日期样式设置,可以满足不同用户的需求,使日期选择更加方便、美观。 ### 回答3: bootstrap-datetimepicker是一个基于Bootstrap框架的日期选择插件,可以方便地在网页中添加日期选择功能。 在使用bootstrap-datetimepicker时,可以通过设置不同的样式来定制日期选择器的外观。以下是一些常用的日期样式说明: 1. 格式:可以通过设置format属性来定义日期的显示格式。例如,format: 'yyyy-mm-dd'将日期以年-月-日的形式显示。 2. 语言:可以通过设置language属性来指定日期选择器的语言。例如,language: 'zh-CN'将日期选择器的语言设置为简体中文。 3. 星期显示:可以通过设置weekStart属性来定义星期的起始日。例如,weekStart: 1将星期的起始日设置为周一。 4. 默认日期:可以通过设置initialDate属性来指定日期选择器的默认日期。例如,initialDate: '2022-01-01'将默认日期设置为2022年1月1日。 5. 最小日期和最大日期:可以通过设置minDate和maxDate属性来限制可选择的日期范围。例如,minDate: '2022-01-01'和maxDate: '2022-12-31'将日期范围限制在2022年内。 6. 显示周数:可以通过设置calendarWeeks属性来决定是否显示周数。例如,calendarWeeks: true将显示每周的周数。 以上仅为一些常用的日期样式设置,bootstrap-datetimepicker还有许多其他样式设置参数,通过灵活使用这些参数,可以根据需要定制出符合自己网页风格的日期选择器

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值