亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

原生js實現日期聯動

2019-11-20 13:26:43
字體:
來源:轉載
供稿:網友

月份的判定,由于涉及到過多了判定條件,如果用if else會大大降低性能,建議用switch 語法

代碼如下:

復制代碼 代碼如下:

 getDays:function(year,month){
         // var aDay = [31,28|29,31,30,31,30,31,31,30,31,30,31];
        // 二月份的天數數據處理
        var FedDays = year%4==0?29:28,
            returnDays = '';
        var month = month<10?month = '0'+month:month.toString();
        switch(month){
            case '01':
            case '03':
            case '05':
            case '07':
            case '08':
            case '10':
            case '12': returnDays = 31;break;
            case '04':
            case '06':
            case '09':
            case '11': returnDays = 30;break;
            case '02': returnDays = FedDays;break;
        }
        return returnDays;
    }

完整的源代碼:

復制代碼 代碼如下:

/*  author:laoguoyong
------------------------------
日期三級聯動,范圍選擇
------------------------------
參數
* [String] targets:'#year,#month,#day' ;年,月,日的id
* [String] range:'2013-02-03,2019-09-21';范圍,正確格式為xxxx-xx-xx
----為了節省代碼,請傳入正確的日期范圍參數
----錯誤示范:
  (1)range:'2013-02-03,2019-9-21' 是不對的,注意日期格式
  (2)range:'2013-02-03' 是不對的,請輸入完整的范圍之值
  (3)range:'2013-02-03,2016-02-30' 是不對的,2月沒有30天
  (3)range:'2013-02-03,2011-02-30' 是不對的,范圍錯誤了
*
*/
function GySetDate(opt){
    //elem
    var targets = opt.targets.split(',');
    this.eYear = this.getId(targets[0].slice(1));
    this.eMonth = this.getId(targets[1].slice(1));
    this.eDay = this.getId(targets[2].slice(1));
    if(!this.eYear||!this.eMonth||!this.eDay) return;
    //范圍值
    var r = opt.range.indexOf(','),
        aStarts = opt.range.slice(0,r).split('-'), // 轉為:['2013','05','20']
        aEnds = opt.range.slice(r+1,opt.range.length).split('-'); // 轉為:['2018','08','20']
    //Number類型
    this.startYear = parseInt(aStarts[0],10);
    this.startMonth = parseInt(aStarts[1],10);
    this.startDay = parseInt(aStarts[2],10);
    this.endYear = parseInt(aEnds[0],10);
    this.endMonth = parseInt(aEnds[1],10);
    this.endDay = parseInt(aEnds[2],10);

    this.init();
}
GySetDate.prototype = {
    init:function(){
        var _that = this;
        // 初始化日期
        this.setYears({'start':this.startYear,'end':this.endYear});
        this.setMonths({'start':this.startMonth});
        this.setDays({'year':this.startYear,'month':this.startMonth,'start':this.startDay});
        // 年選擇
        this.eYear.onchange = function(){
            var year = parseInt(this.value);
            switch(true){
                case (year == _that.startYear):{
                    _that.setMonths({'start':_that.startMonth});
                    _that.setDays({'year':_that.startYear,'month':_that.startMonth,'start':_that.startDay});
                };break;
                case (year == _that.endYear):{
                    _that.setMonths({'start':1,'end':_that.endMonth});
                    if(_that.endMonth>1){
                        _that.setDays({'year':_that.endYear,'month':1,'start':1});   
                    }else{
                        _that.setDays({'year':_that.endYear,'month':1,'start':1,'end':_that.endDay});
                    }
                };break;
                default:{
                    _that.setMonths({'start':1});
                    _that.setDays({'start':1,'year':year,'month':1});
                }
            }
           
        }
        // 月選擇
        this.eMonth.onchange = function(){
            var year = parseInt(_that.eYear.options[_that.eYear.selectedIndex].value),
                month = parseInt(this.value);
            switch(true){
                case (year==_that.endYear&&month==_that.endMonth):{
                    _that.setDays({'start':1,'year':year,'month':month,'end':_that.endDay});
                };break;
                case (year==_that.startYear&&month==_that.startMonth):{
                    _that.setDays({'year':_that.startYear,'month':_that.startMonth,'start':_that.startDay});
                };break;
                default:{
                    _that.setDays({'start':1,'year':year,'month':month});
                }
            }   
           
        }
    },
    /*設置年,月,日
    ----------------------------------
    參數值都為Number類型
    */
    // 參數 {'start':xx,'end':xxx}
    setYears:function(opt){
        this.eYear.innerHTML = '';
         for(var n=opt.start;n<=opt.end;n++){
            this.eYear.add(new Option(n,n));
        }
    },
    // 參數 {'start':xx,'end':xxx}
    // 參數 'end' 為可選,忽略,則開始到12月
    setMonths:function(opt){
        this.eMonth.innerHTML = '';
        var months = opt.end || 12;
        for(var n=opt.start;n<=months;n++){
            if(n<10) n = '0'+n;
           this.eMonth.add(new Option(n,n));
        }
    },
    // 參數 {'start':xx,'year':xxx,'month':xx,'star':xx,'end':xxx}
    // 參數 'end' 為可選,忽略,則開始到本月底(根據月份判斷的)
    setDays:function(opt){
         this.eDay.innerHTML = '';
         var days = opt.end || this.getDays(opt.year,opt.month);
         for(var n=opt.start;n<=days;n++){
            if(n<10) n = '0'+n;
            this.eDay.add(new Option(n,n));
         }
    },
    /* 根據 年,月,返回正確的天數,如 2016-2,返回是29天(潤年)
    --------------------------------------------------------------
    參數值都為Number類型
    */
    getDays:function(year,month){
         // var aDay = [31,28|29,31,30,31,30,31,31,30,31,30,31];
        // 二月份的天數數據處理
        var FedDays = year%4==0?29:28,
            returnDays = '';
        var month = month<10?month = '0'+month:month.toString();
        switch(month){
            case '01':
            case '03':
            case '05':
            case '07':
            case '08':
            case '10':
            case '12': returnDays = 31;break;
            case '04':
            case '06':
            case '09':
            case '11': returnDays = 30;break;
            case '02': returnDays = FedDays;break;
        }
        return returnDays;
    },
    /*工具輔助函數
    ----------------------------------
    */
    getId:function(id){
        return document.getElementById(id);
    }
}

效果展示圖:

效果還不錯吧,小伙伴們自己美化下,使用到自己的項目中去吧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品国产| 欧洲成人免费aa| 欧美午夜精品久久久久久久| 热久久这里只有精品| 最好看的2019年中文视频| 国产成人亚洲精品| 欧美日韩国产麻豆| 国产69精品久久久久99| 亚洲国产欧美一区二区三区同亚洲| 国产精品日韩在线播放| 亚洲欧美另类自拍| 日韩精品在线观看一区| 欧美日韩久久久久| 欧美裸体男粗大视频在线观看| 亚洲第一精品久久忘忧草社区| 中文字幕最新精品| 久99九色视频在线观看| 亚洲精品久久久久中文字幕欢迎你| 青青草精品毛片| 精品久久香蕉国产线看观看gif| 日韩精品福利网站| 国产精品入口尤物| 欧美丝袜第一区| 欧美性少妇18aaaa视频| 日韩一区视频在线| 成人激情av在线| 国产成人av在线播放| 亚洲黄色www网站| 亚洲一区久久久| 国内精品小视频| 国产精品v日韩精品| 欧美激情视频给我| 国产精品香蕉国产| 欧美性色xo影院| 两个人的视频www国产精品| 欧美日韩久久久久| 亚洲国产精品中文| 国产91精品网站| 亚洲精品国产精品国自产在线| 欧美激情在线一区| 91高清视频免费观看| 国产成人av在线| 日韩av第一页| 欧美黄色性视频| 亚洲毛片在线观看| 亚洲欧洲第一视频| 国产精品中文在线| 成人性生交大片免费看视频直播| 日韩美女视频免费看| 在线播放日韩av| 国产69精品久久久久9| 国产精品久久久久久婷婷天堂| 久久亚洲精品小早川怜子66| 国产一区二区三区三区在线观看| 亚洲自拍小视频免费观看| 欧美日韩人人澡狠狠躁视频| 国产精品久久久久久久久久尿| 青草成人免费视频| 亚洲一区二区三区在线免费观看| 在线视频欧美性高潮| 国产日韩欧美综合| 欧美日韩另类视频| 色播久久人人爽人人爽人人片视av| 九九久久久久99精品| 欧美性猛交xxxx偷拍洗澡| 久久视频在线看| 91精品国产一区| 国产在线a不卡| 欧美一级淫片aaaaaaa视频| 福利精品视频在线| 久久综合久久88| 亚洲国产精品va在线看黑人动漫| 国内精品视频一区| 日韩精品中文字幕在线| 久久综合久久美利坚合众国| 日韩天堂在线视频| 亚洲精品视频免费在线观看| 91在线免费观看网站| 亚洲一区二区三区久久| 国产亚洲a∨片在线观看| 亚洲中国色老太| 国产成人在线播放| 亚洲欧美国产另类| 97精品国产97久久久久久免费| 91免费精品视频| 亚洲黄色www网站| 日本精品一区二区三区在线| 国产日韩在线看片| 亚洲精品xxx| 久久成人精品一区二区三区| 97色在线视频观看| 亚洲国产成人精品女人久久久| 91精品国产99久久久久久| 日韩激情av在线免费观看| 精品久久久久久| 国产精品96久久久久久又黄又硬| 国产欧美精品在线| 亚洲成人av片在线观看| 欧美精品成人91久久久久久久| 日本不卡高字幕在线2019| 亚洲国产精品人人爽夜夜爽| 国产激情久久久| 日本aⅴ大伊香蕉精品视频| 亚洲第一福利网站| 成人网中文字幕| 2019中文字幕在线免费观看| 国产视频在线观看一区二区| 97视频在线观看视频免费视频| 中文字幕日韩精品在线| 91精品国产综合久久香蕉922| 精品福利一区二区| 97久久精品国产| 2019中文字幕免费视频| 亚洲人在线观看| 国精产品一区一区三区有限在线| 91精品综合久久久久久五月天| 国产精品一区=区| 精品国产视频在线| 国产日韩av在线播放| 久久69精品久久久久久久电影好| 亚洲国产精品推荐| 亚洲第一页中文字幕| 中文字幕日韩免费视频| 国产精品91久久久| 91青草视频久久| 亚洲精品电影在线观看| 欧美午夜无遮挡| 中文字幕在线国产精品| 最近2019中文字幕在线高清| 国产裸体写真av一区二区| 久久精品免费电影| 日韩免费在线免费观看| 欧美日韩国产激情| 亚洲综合中文字幕68页| 国语自产精品视频在线看抢先版图片| 欧美在线不卡区| 日韩大片免费观看视频播放| 在线观看久久av| 成人午夜在线影院| 欧美性高潮在线| 亚洲自拍在线观看| 亚洲成人精品视频| 亚洲精品国产精品国产自| 国产精品18久久久久久首页狼| 久久精品视频中文字幕| 91视频-88av| 国产精品久久久久久五月尺| 欧美自拍视频在线观看| 国产不卡av在线| 精品美女久久久久久免费| 岛国av一区二区在线在线观看| 亚洲国产精品热久久| 国产午夜精品免费一区二区三区| 亚洲无亚洲人成网站77777| 欧美中文在线观看| 自拍偷拍亚洲一区| 国产精品丝袜久久久久久高清| 国产成人激情小视频| 综合av色偷偷网| 国产精品久久久久999| 宅男66日本亚洲欧美视频| 欧美激情第三页| 一个人www欧美| 久久国产精品偷|