var lq_datetimepick = false; $.fn.lqdatetimepicker = function (options) { lq_datetimepick = true; return this.each(function () { var $this = $(this); if ($("#lq-datetimepick").length > 0) $("#lq-datetimepick").remove(); var _this = { css: "datetime-day", //datetime-hour 时分样式 ,datetime-day 日期样式 offset: { left : 0, top : 10 }, dateType: 'H', //H选择时分,D选择日期 date: { 'H' : { begin : '8:00', //开始时分 end : '23:30', //结束时分 step : "30" //时分步长 }, 'D' : { month : new Date(), //日期默认时间 selected : (new Date()).getDate() }, 'M' : { begin : 1, //月份开始 end : 12, //月份结束 selected : (new Date()).getMonth()+1 //月份初始 }, 'Y' : { begin : (new Date()).getFullYear(), //年份开始 end : (new Date()).getFullYear()+2, //年份结束 selected : (new Date()).getFullYear() //年份初始 } }, selectback : function(){}, //选择时间的事件回调 callback : function () { } //初始化时间事件回调 }; $.extend(_this, options); var _obj = $("
"); var _arr = $("
"); var _container = $("
"); var _selectitem = $("
"); var _header = $("
"); var _item = $("
"); var _day; var _datevalue = $this.val() == '' ? new Date() : new Date($this.val().replace(/-/g, "/")); var _dateyear = _datevalue.getFullYear(); var _datemonth = _datevalue.getMonth()+1; var _datedate = _datevalue.getDate(); var _x = $this.offset().left + _this.offset.left, _y = $this.offset().top + $this.outerHeight() + _this.offset.top; if(_this.css != undefined || _this.css != ''){ _header.addClass(_this.css); _item.addClass(_this.css); } if($this.val() != ''){ _this.date.D.month = new Date($this.val().replace(/-/g, "/")); } $.fn.lqdatetimepicker.setDateData($this,_obj,_item,_this); //日期 if(_this.dateType == 'D'){ //年份 var _select_year = $.fn.lqdatetimepicker.setSelectData(_this,'Y'); var _selectul_year = $("
"); var _select_year_t = $("
"); if(_dateyear != '') _select_year_t.attr("data-value",_dateyear); _select_year_t.html("选择年份"); _select_year_t.appendTo(_selectul_year); _select_year.appendTo(_selectul_year); _selectul_year.appendTo(_selectitem); _selectitem.appendTo(_container); //月份 var _select_month = $.fn.lqdatetimepicker.setSelectData(_this,'M'); var _selectul_month = $("
"); var _select_month_t = $("
"); if(_datemonth != '') _select_month_t.attr("data-value",_datemonth); _select_month_t.html("选择月份"); _select_month_t.appendTo(_selectul_month); _select_month.appendTo(_selectul_month); _selectul_month.appendTo(_selectitem); _selectitem.appendTo(_container); //星期 _week = $.fn.lqdatetimepicker.intWeek(); for(var i=0; i<7; i++){ _day = $("
"+_week[i]+"
"); _day.appendTo(_header); } _header.appendTo(_container); } _arr.appendTo(_obj); _container.appendTo(_obj); _item.appendTo(_container); _obj.appendTo("body").css({ left : _x + 'px', top : _y + 'px' }).show(); _this.callback(); LQ.selectUi.show({ id:"lqyear", hiddenInput:"selectYear", pulldown:function(){ var _year = $("#selectYear").val(); var _month = $("#selectMonth").val(); var _day = $(".datetime-time>dd.selected").attr("data-value"); _day = _day==undefined ? _this.date.D.selected : _day; _this.date.D.month = new Date(_year+'/'+_month+'/'+_day); $.fn.lqdatetimepicker.setDateData($this,_obj,_item,_this); } }); LQ.selectUi.show({ id:"lqmonth", hiddenInput:"selectMonth", pulldown:function(){ var _year = $("#selectYear").val(); var _month = $("#selectMonth").val(); var _day = $(".datetime-time>dd.selected").attr("data-value"); _day = _day==undefined ? _this.date.D.selected : _day; _this.date.D.month = new Date(_year+'/'+_month+'/'+_day); $.fn.lqdatetimepicker.setDateData($this,_obj,_item,_this); } }); _obj.on("click",function(e){ e.stopPropagation(); }); $(document).on("click",function(e){ if(lq_datetimepick){ _obj.remove(); } }); }) }; $.fn.lqdatetimepicker.setDateData = function($this,_obj,_item,_this){ var _time; var _datetime = $.fn.lqdatetimepicker.setDateTime(_this); if (typeof(_datetime) == 'object'){ _item.empty(); for (var i=0; i<_datetime.length; i++){ _time = $("
"+_datetime[i]+"
"); if(_this.dateType == 'D'){ _time.attr('data-value',_this.date.D.month.getFullYear()+'-'+(_this.date.D.month.getMonth()+1)+'-'+_time.attr('data-value')) } _time.on("click",function(){ if($(this).hasClass('blank')) return; $this.val($(this).attr("data-value")); _obj.remove(); _this.selectback(); }); _time.hover(function(){ $(this).addClass('over'); },function(){ $(this).removeClass('over'); }); if($this.val() == _datetime[i]){ _time.addClass('selected') } if(($this.val() == '') && (_this.dateType == 'D') && (_this.date.D.month.getDate() == _datetime[i])){ _time.addClass('current'); } if((new Date($this.val()).getDate() == _datetime[i]) && (_this.dateType == 'D')){ _time.addClass('current'); } if(_datetime[i] == ''){ _time.addClass('blank'); } _time.appendTo(_item); } } } $.fn.lqdatetimepicker.setDateTime = function(_this){ var dateTime; if(_this.dateType == 'H'){ dateTime = $.fn.lqdatetimepicker.intHourTime(_this); }else if(_this.dateType == 'D') { dateTime = $.fn.lqdatetimepicker.intDayTime(_this); } return dateTime; }; $.fn.lqdatetimepicker.setSelectData = function(_this,type){ var _data; var _cell; var _select = $(""); if(type == 'Y'){ _data = $.fn.lqdatetimepicker.intYearTime(_this); _cell = '年'; } if(type == 'M'){ _data = $.fn.lqdatetimepicker.intMonthTime(_this); _cell = '月' } for(var i=0; i<_data.length; i++){ $("").text(_data[i]+_cell).attr("value",_data[i]).appendTo(_select); } return _select; }; /*时分*/ $.fn.lqdatetimepicker.intHourTime = function(_this){ var begindate = _this.date.H.begin; var enddate = _this.date.H.end; var stepdate = _this.date.H.step; var _a = []; var _date = new Date(); var _now = _date.getFullYear()+"/"+(_date.getMonth()+1)+"/"+_date.getDate(); var _begindate = new Date(_now+" "+begindate); var _enddate = new Date(_now+" "+enddate); var _hours = _enddate.getHours() - _begindate.getHours(); var _minutes = _enddate.getMinutes() - _begindate.getMinutes(); var _len = (_hours*60 + _minutes)/stepdate; for(var i=0; i<=_len; i++){ var _t = $.fn.lqdatetimepicker.dateAdd('M',stepdate*i,_begindate); _a.push(_t.getHours()+":"+(_t.getMinutes() >= 10 ? _t.getMinutes() : '0'+_t.getMinutes())); } return _a; }; /*日期*/ $.fn.lqdatetimepicker.intDayTime = function(_this){ var _a = []; var _date = _this.date.D.month; var _year = _date.getFullYear(); var _month = _date.getMonth(); var _week = new Date(_year+'/'+(_month+1)+'/1').getDay(); // 当前月的第一天 var _day = 32-new Date(_year,_month,32).getDate(); var _cell = Math.ceil((_week + _day)/7)*7 - (_week + _day); for(var w=0; w<_week; w++){ _a.push(''); } for(var i=0; i<_day; i++){ _a.push(i+1); } for(var w=0; w<_cell; w++){ _a.push(''); } return _a; }; /*月份*/ $.fn.lqdatetimepicker.intMonthTime = function(_this){ var _a = []; var _month_begin = _this.date.M.begin; var _month_end = _this.date.M.end; for(var i=_month_begin,j=_month_end+1; i