calendar.js 8.0 KB

1
  1. function setDateModal(a){function t(){var a=arguments[0],t=arguments[1];a=Date.parse(a)/1e3,t=Date.parse(t)/1e3;var e=a-t;return Math.abs(e/86400)+1}a=$.extend({title:"已选时间",titleArr:["开始时间","结束时间"],showBtn:!0},a);var e=$("html"),s=$(a.parent?a.parent:"body");e.css("overflow","hidden"),s.css("overflow","hidden");var n=$(' <div class="date-popover-modal '+(a.showBtn?"":"no-btn")+'" id="set-date-modal"><div class="modal-mask"> <div class="modal-content"><div class="modal-header"><div class="btn-list"><div class="handle-btn your-date"> <p class="label-text">'+a.title+'</p> <p class="selected-val">请选择</p> </div><div class="handle-btn start-date"> <p class="label-text">'+a.titleArr[0]+'</p> <p class="selected-val">请选择</p> </div><div class="handle-btn end-date"> <p class="label-text">'+a.titleArr[1]+'</p> <p class="selected-val">请选择</p> </div></div></div><div class="modal-body"><div class="wrapper"><div class="select-panel"></div><div class="handle-list"><div class="cancel-btn">取消</div><div class="ok-btn">确定</div></div></div></div></div></div></div>');s.append(n);var i=n.find(".modal-content"),d=n.find(".modal-mask");i.slideDown(300,function(){});var l=a.dateRange;l?(n.find(".start-date").addClass("show"),n.find(".end-date").addClass("show")):n.find(".your-date").addClass("show");var r=function(a,t){var e={ifSwitch:!0,hoverDate:!1,backToday:!0,dateRange:l,callback:function(){}};t=$.extend({minDate:t.minDate,maxDate:t.maxDate},e,t),$(a).calendar(t)},c=null,o=null,h=n.find(".handle-btn.start-date"),v=n.find(".handle-btn.end-date"),u=n.find(".handle-btn.your-date");r(".date-popover-modal .select-panel",{minDate:a.minDate,maxDate:a.maxDate,callback:function(t,e){c=t,o=e,l?(c&&h.find(".selected-val").html(c).addClass("active"),o?v.find(".selected-val").html(o).addClass("active"):v.find(".selected-val").html("请选择").removeClass("active"),c&&o&&!a.showBtn?setTimeout(function(){p()},500):c&&f("endDate")):c&&(u.find(".selected-val").html(c).addClass("active"),a.showBtn||setTimeout(function(){p()},500))}});var f=function(a){n.find(".handle-btn").removeClass("active"),"startDate"==a?h.addClass("active"):"endDate"==a?v.addClass("active"):"yourDate"==a&&u.addClass("active")};f(l?"startDate":"yourDate");var m=function(a){a&&(a.cancelBubble?a.cancelBubble=!0:a.stopPropagation&&a.stopPropagation())},b=function(){n.fadeOut(300,function(){e.css("overflow","visible"),s.css("overflow","visible"),n.remove()})},p=function(){if(!c)return void alert("请选择日期");if(l){if(c&&o&&t(c,o)>l.count)return void(a.dateRange.tipsCallback&&a.dateRange.tipsCallback());c&&!o&&(o=c)}a&&a.callback&&a.callback(c,o),b()};d.on("click",function(a){m(a),b()}),i.on("click",function(a){m(a)}),i.find(".handle-btn").on("click",function(a){var t=$(a.currentTarget);t.hasClass("start-date")?r("startDate"):t.hasClass("end-date")}),i.find(".ok-btn").on("click",function(){p()}),i.find(".cancel-btn").on("click",function(){b()})}!function(a){function t(a){var t=a.getFullYear(),e=a.getMonth()+1,s=a.getDate();return e=9>=e?"0"+e:""+e,s=9>=s?"0"+s:""+s,t+"-"+e+"-"+s}function e(a){var t=a.split("-");return new Date(t[0],t[1]-1,t[2])}function s(a){return a.substr(0,4)+"-"+a.substr(4,2)+"-"+a.substring(6)}var n=function(t,e){this.$calendar=t,this.defaults={ifSwitch:!0,hoverDate:!1,backToday:!1},this.opts=a.extend({},this.defaults,e),this.dateObj=new i,this.curDate=new Date};n.prototype={showHoverInfo:function(t){var n=a(t).attr("data"),i=a(t).offset().top+(this.$calendar_today.height()-a(t).height())/2,d=a(t).offset().left+a(t).width(),l=s(n),r=e(l).getDay(),c="";switch(this.$calendar_today.show(),this.$calendar_today.css({left:d+30,top:i}).stop().animate({left:d+16,top:i}),r){case 0:c="Sunday";break;case 1:c="Monday";break;case 2:c="Tuesday";break;case 3:c="Wednesday";break;case 4:c="Thursday";break;case 5:c="Friday";break;case 6:c="Saturday"}this.$calendarToday_date.text(l),this.$calendarToday_week.text(c)},showCalendar:function(){var s=this,n=s.dateObj.getDate().getFullYear(),i=s.dateObj.getDate().getMonth()+1,d=t(s.dateObj.getDate()),l=d.split("-"),r=new Date(n,i-1,1);if(this.$calendarTitle_text.text(l[0]+"-"+l[1]),this.$calendarDate_item.each(function(d){var l=new Date(n,i-1,d+1-r.getDay()),c=t(l);a(this).text(l.getDate()).attr("data",c),t(new Date)===c?a(this).attr("class","item item-curDay"):new Date(r).getMonth()==new Date(c).getMonth()?a(this).attr("class","item item-curMonth"):a(this).attr("class","item"),s.opts.minDate&&s.opts.minDate>e(c)&&a(this).addClass("disabled"),s.opts.maxDate&&s.opts.maxDate<e(c)&&a(this).addClass("disabled")}),s.selected_data){var c=s.$calendar_date.find("[data="+s.selected_data+"]");c.addClass("item-selected")}s.renderRange&&s.renderRange()},renderDOM:function(){this.$calendar_title=a('<div class="calendar-title"></div>'),this.$calendar_week=a('<ul class="calendar-week"></ul>'),this.$calendar_date=a('<ul class="calendar-date"></ul>'),this.$calendar_today=a('<div class="calendar-today"></div>');for(var t='<a href="javascript:;" id="backToday">T</a><div class="arrow"><span class="arrow-prev"><</span><a href="#" class="title"></a><span class="arrow-next">></span></div>',e='<li class="item">日</li><li class="item">一</li><li class="item">二</li><li class="item">三</li><li class="item">四</li><li class="item">五</li><li class="item">六</li>',s="",n=0;6>n;n++)s+='<li class="item">26</li><li class="item">26</li><li class="item">26</li><li class="item">26</li><li class="item">26</li><li class="item">26</li><li class="item">26</li>';this.$calendar_title.html(t),this.$calendar_week.html(e),this.$calendar_date.html(s),this.$calendar.append(this.$calendar_title,this.$calendar_week,this.$calendar_date,this.$calendar_today),this.$calendar.show()},inital:function(){var t=this;if(this.renderDOM(),this.$calendarTitle_text=this.$calendar_title.find(".title"),this.$backToday=a("#backToday"),this.$arrow_prev=this.$calendar_title.find(".arrow-prev"),this.$arrow_next=this.$calendar_title.find(".arrow-next"),this.$calendarDate_item=this.$calendar_date.find(".item"),this.$calendarToday_date=this.$calendar_today.find(".date"),this.$calendarToday_week=this.$calendar_today.find(".week"),this.selected_data=0,this.showCalendar(),this.opts.ifSwitch&&(this.$arrow_prev.bind("tap",function(){var a=t.dateObj.getDate();t.dateObj.setDate(new Date(a.getFullYear(),a.getMonth()-1,1)),t.showCalendar(),t.renderRange()}),this.$arrow_next.bind("tap",function(){var a=t.dateObj.getDate();t.dateObj.setDate(new Date(a.getFullYear(),a.getMonth()+1,1)),t.showCalendar(),t.renderRange()})),this.opts.backToday){var n=t.dateObj.getDate().getMonth()+1;this.$backToday.bind("click",function(){var e=a(".item-curMonth").eq(0).attr("data").substr(4,2),s=e!=n?!0:!1;(!t.$calendarDate_item.hasClass("item-curDay")||s)&&(t.dateObj.setDate(new Date),t.showCalendar())})}var i=function(a,t){var e=function(a){var t=typeof a,e=null;return"string"==t||"number"==t?e=new Date(a):"object"==t&&(e=a),e};return e(a).getTime()<=e(t).getTime()},d=null,l=null;this.renderRange=function(){var e=a(".calendar-date .item");t.opts.dateRange&&d&&l?e.each(function(){var t=a(this),e=t.attr("data");i(d,e)&&i(e,l)&&t.addClass("item-selected"),e==d&&t.addClass("start"),e==l&&t.addClass("end")}):d&&(e.removeClass("item-selected start end"),a("[data="+d+"]").addClass("item-selected"))},t.renderRange();var r=this;this.$calendarDate_item.click(function(){var n=a(this).attr("data"),c=e(s(n.split("-").join(""))),o=null;t.selected_data=a(this).attr("data"),r.dateObj.setDate(new Date(c.getFullYear(),c.getMonth(),1)),a(this).hasClass("item-curMonth")||setTimeout(function(){t.showCalendar()},200),o=t.$calendar_date.find("[data="+n+"]"),$curDay=t.$calendar_date.find(".item-curDay"),o.hasClass("item-selected")||(t.$calendarDate_item.removeClass("item-selected"),o.addClass("item-selected")),t.opts.dateRange&&d?l?(d=n,l=null):i(d,n)?l=n:(l=d,d=n):d=n,t.renderRange(),r.opts&&r.opts.callback&&r.opts.callback(d,l)})},constructor:n},a.fn.calendar=function(a){var t=new n(this,a);return t.inital()};var i=function(){var a=new Date;return{getDate:function(){return a},setDate:function(t){a=t}}}}(jQuery,window,document);