评论:原生js简单日期插件  [查看原文]

所属分类:输入-日期和时间

 113764  479  52
当前第2页 / 共3页
    zongzong080
    2018/8/8 17:09:15
    我感觉如果其实一位的时候,能把前面的0补齐最好 回复
    柠檬很酸0
    2018/7/31 17:38:43
    点击完后的日期格式怎么改? 回复
    落幕之后0
    2018/6/20 10:34:14
    苹果微信浏览器不兼容 回复
    ??0
    2018/6/14 11:07:04
    怎么限制不能选择以前的日期呀 求大佬给点思路 回复
    0
    2018/4/19 15:38:00
    怎么限制不能选择以前的日期呀 求大佬给点思路
    回复
    奶酪凌0
    2018/3/12 16:52:46
    大大,我想问下,这个怎么和vue中的v-model绑定?我选中了日期,页面上能显示时间,但是我数据传的时候,还是表示时间为空的,没有绑定。麻烦指点下 回复
    仰望星空0
    2018/3/9 11:29:02
    谁能帮加一个日程标注的功能,就是哪天有事情就画个红圈,外部传入日期就行,谁会啊
        Agrass0
        2018/5/29 8:45:46
        很难吗?
                   听0
        2019/12/25 10:07:18
        你弄好了没有?
    回复
    朱瑞飞0
    2018/2/7 15:39:59
    很好,工作中用到了。顶一下。
    回复
    POLYnia0
    2017/12/29 15:48:08

    范围时间的怎么写?比如2010-01到2013-07,选的话,只能选择这里面的,超过这个范围的都不能选!!!

    回复
    POLYnia0
    2017/12/29 13:55:30

    哪个吊大的知道,怎样将schedule.js里面的H5样式代码,写到index.html页面中!因为我需要在单独的天数上添加点击事件!!!

    回复
    oooiuv1
    2017/12/20 9:08:32

    有个小问题,就是本月有31号  点击下个月,最上面日期也显示31号。(其实只有30天)

    修复后的JS:

    ;(function (undefined) {
    	var _global;
    	//工具函数
    	//配置合并
    	function extend (def,opt,override) {
    		for(var k in opt){
    			if(opt.hasOwnProperty(k) && (!def.hasOwnProperty(k) || override)){
    				def[k] = opt[k]
    			}
    		}
    		return def;
    	}
    	//日期格式化
    	function formartDate (y,m,d,symbol) {
    		symbol = symbol || '-';
    		m = (m.toString())[1] ? m : '0'+m;
    		d = (d.toString())[1] ? d : '0'+d;
    		return y+symbol+m+symbol+d
    	}
    
    	function Schedule (opt) {
    		var def = {},
    			opt = extend(def,opt,true),
    			curDate = opt.date ? new Date(opt.date) : new Date(),
    			year = curDate.getFullYear(),
    			month = curDate.getMonth(),
    			day = curDate.getDate(),	
    			currentYear = curDate.getFullYear(),
    			currentMonth = curDate.getMonth(),
    			currentDay = curDate.getDate(),
    			selectedDate = '',
    			el = document.querySelector(opt.el) || document.querySelector('body'),
    			_this = this;
    		var bindEvent = function (){
    			el.addEventListener('click',function(e){
    				switch (e.target.id) {
    					case 'nextMonth': 
    						_this.nextMonthFun();
    						break;
    					case 'nextYear': 
    						_this.nextYearFun();
    						break;
    					case 'prevMonth': 
    						_this.prevMonthFun();
    						break;
    					case 'prevYear': 
    						_this.prevYearFun();
    						break;
    					default:
    						break;
    				};
    				if(e.target.className.indexOf('currentDate') > -1){
    					opt.clickCb && opt.clickCb(year, month+1, e.target.innerHTML);
    					selectedDate = e.target.title;
    					day = e.target.innerHTML;
    					render();
    				}
    			},false)
    		}
    		var init = function () {
    			var scheduleHd = '<div class="schedule-hd">'+
    								'<div>'+
    									'<span class="arrow icon iconfont icon-116leftarrowheads" id="prevYear" ></span>'+
    									'<span class="arrow icon iconfont icon-112leftarrowhead" id="prevMonth"></span>'+
    								'</div>'+
    								'<div class="today">'+formartDate(year,month+1,day,'-')+'</div>'+
    								'<div>'+
    									'<span class="arrow icon iconfont icon-111arrowheadright" id="nextMonth"></span>'+
    									'<span class="arrow icon iconfont icon-115rightarrowheads" id="nextYear"></span>'+
    								'</div>'+
    							'</div>'
    			var scheduleWeek = '<ul class="week-ul ul-box">'+
    									'<li>日</li>'+
    									'<li>一</li>'+
    									'<li>二</li>'+
    									'<li>三</li>'+
    									'<li>四</li>'+
    									'<li>五</li>'+
    									'<li>六</li>'+
    								'</ul>'
    			var scheduleBd = '<ul class="schedule-bd ul-box" ></ul>'; 
    			el.innerHTML = scheduleHd + scheduleWeek + scheduleBd;
    			bindEvent();
    			render();
    		}
    		var render = function () {
    			var fullDay = new Date(year,month+1,0).getDate(), //当月总天数
    			startWeek = new Date(year,month,1).getDay(), //当月第一天是周几
    			total = (fullDay+startWeek)%7 == 0 ? (fullDay+startWeek) : fullDay+startWeek+(7-(fullDay+startWeek)%7),//元素总个数
    			lastMonthDay = new Date(year,month,0).getDate(), //上月最后一天
    			eleTemp = [];
    			if(day > fullDay){
    				day = fullDay
    			}
    			for(var i = 0; i < total; i++){
    				if(i<startWeek){
    					eleTemp.push('<li class="other-month"><span class="dayStyle">'+(lastMonthDay-startWeek+1+i)+'</span></li>')
    				}else if(i<(startWeek+fullDay)){
    					var nowDate = formartDate(year,month+1,(i+1-startWeek),'-');
    					var addClass = '';
    					selectedDate == nowDate && (addClass = 'selected-style');
    					formartDate(currentYear,currentMonth+1,currentDay,'-') == nowDate && (addClass = 'today-flag');
    					eleTemp.push('<li class="current-month" ><span title='+nowDate+' class="currentDate dayStyle '+addClass+'">'+(i+1-startWeek)+'</span></li>')
    				}else{
    					eleTemp.push('<li class="other-month"><span class="dayStyle">'+(i+1-(startWeek+fullDay))+'</span></li>')
    				}
    			}
    			el.querySelector('.schedule-bd').innerHTML = eleTemp.join('');
    			el.querySelector('.today').innerHTML = formartDate(year,month+1,day,'-');
    		};
    		this.nextMonthFun = function () {
    			if(month+1 > 11){
    				year += 1;
    				month = 0;
    			}else{
    				month += 1;
    			}
    			render();
    			opt.nextMonthCb && opt.nextMonthCb(year,month+1,day);
    		},
    		this.nextYearFun = function () {
    			year += 1;
    			render();
    			opt.nextYeayCb && opt.nextYeayCb(year,month+1,day);
    		},
    		this.prevMonthFun = function () {
    			if(month-1 < 0){
    				year -= 1;
    				month = 11;
    			}else{
    				month -= 1;
    			}
    			render();
    			opt.prevMonthCb && opt.prevMonthCb(year,month+1,day);
    		},
    		this.prevYearFun = function () {
    			year -= 1;
    			render();
    			opt.prevYearCb && opt.prevYearCb(year,month+1,day);
    		}
    		init();
    	}
    	//将插件暴露给全局对象
    	_global = (function(){return this || (0,eval)('this')}());
    	if(typeof module !== 'undefined' && module.exports){
    		module.exports = Schedule;
    	}else if (typeof define === "function" && define.amd){
    		define(function () {
    			return Schedule;
    		})
    	}else {
    		!('Schedule' in _global) && (_global.Schedule = Schedule);
    	}
    
    }());
    回复
    香菇青菜0
    2017/12/7 16:01:24

    你的这个不兼容ie8及ie8以下吗

    回复
    54shanshan0
    2017/11/23 15:33:20

    我放到移动端怎么没反应

    回复
    西索小包子0
    2017/10/18 17:15:03

    怎样使当天以前的日期不能选择

    回复
    开花结果翻江倒海i疯狗0
    2017/10/16 10:12:51

讨论这个项目(52)回答他人问题或分享插件使用方法奖励jQ币 评论用户自律公约

取消回复