转载自:http://blog.csdn.net/sp308036654/article/details/50638348
<input type="text" class="time hotelDepartrue" datefmt="yyyy-MM-dd" onchange="checkDate('endDate')"/>
1:找到dwz.datepicker.js文件
2:在下面的文件中,把红色的部分添加进去
/**
* reference dwz.util.date.js
*
*/
(function($){
$.setRegional("datepicker", {
dayNames:['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
monthNames:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
});
$.fn.datepicker = function(opts){
var setting = {
box$:"#calendar",
year$:"#calendar [name=year]", month$:"#calendar [name=month]",
tmInputs$:"#calendar .time :text", hour$:"#calendar .time .hh", minute$:"#calendar .time .mm", second$:"#calendar .time .ss",
tmBox$:"#calendar .tm", tmUp$:"#calendar .time .up", tmDown$:"#calendar .time .down",
close$:"#calendar .close", calIcon$:"a.inputDateButton",
main$:"#calendar .main", days$:"#calendar .days", dayNames$:"#calendar .dayNames",
clearBut$:"#calendar .clearBut", okBut$:"#calendar .okBut"
};
function changeTmMenu(sltClass){
var $tm = $(setting.tmBox$);
$tm.removeClass("hh").removeClass("mm").removeClass("ss");
if (sltClass) {
$tm.addClass(sltClass);
$(setting.tmInputs$).removeClass("slt").filter("." + sltClass).addClass("slt");
}
}
function clickTmMenu($input, type){
$(setting.tmBox$).find("."+type+" li").each(function(){
var $li = $(this);
$li.click(function(){
$input.val($li.text());
});
});
}
function keydownInt(e){
if (!((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode == DWZ.keyCode.DELETE || e.keyCode == DWZ.keyCode.BACKSPACE))) { return false; }
}
function changeTm($input, type){
var ivalue = parseInt($input.val()), istart = parseInt($input.attr("start")) || 0, iend = parseInt($input.attr("end"));
var istep = parseInt($input.attr('step') || 1);
if (type == 1) {
if (ivalue <= iend-istep){$input.val(ivalue + istep);}
} else if (type == -1){
if (ivalue >= istart+istep){$input.val(ivalue - istep);}
} else if (ivalue > iend) {
$input.val(iend);
} else if (ivalue < istart) {
$input.val(istart);
}
}
return this.each(function(){
var $this = $(this);
var dp = new Datepicker($this.val(), opts);
function generateCalendar(dp){
var dw = dp.getDateWrap();
var minDate = dp.getMinDate();
var maxDate = dp.getMaxDate();
var monthStart = new Date(dw.year,dw.month-1,1);
var startDay = monthStart.getDay();
var dayStr="";
if (startDay > 0){
monthStart.setMonth(monthStart.getMonth() - 1);
var prevDateWrap = dp.getDateWrap(monthStart);
for(var t=prevDateWrap.days-startDay+1;t<=prevDateWrap.days;t++) {
var _date = new Date(dw.year,dw.month-2,t);
var _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';
dayStr+='<dd class="other '+_ctrClass+'" chMonth="-1" day="' + t + '">'+t+'</dd>';
}
}
for(var t=1;t<=dw.days;t++){
var _date = new Date(dw.year,dw.month-1,t);
var _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';
if(t==dw.day){
dayStr+='<dd class="slt '+_ctrClass+'" day="' + t + '">'+t+'</dd>';
}else{
dayStr+='<dd class="'+_ctrClass+'" day="' + t + '">'+t+'</dd>';
}
}
for(var t=1;t<=42-startDay-dw.days;t++){
var _date = new Date(dw.year,dw.month,t);
var _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';
dayStr+='<dd class="other '+_ctrClass+'" chMonth="1" day="' + t + '">'+t+'</dd>';
}
var $days = $(setting.days$).html(dayStr).find("dd");
$days.not('.disabled').click(function(){
var $day = $(this);
if (!dp.hasTime()) {
$this.val(dp.formatDate(dp.changeDay($day.attr("day"), $day.attr("chMonth"))));
// 添加监听日期改变(PineTree添加)
$this.change();
closeCalendar();
} else {
$days.removeClass("slt");
$day.addClass("slt");
}
});
if (!dp.hasDate()) $(setting.main$).addClass('nodate'); // 仅时间,无日期
if (dp.hasTime()) {
$("#calendar .time").show();
var $hour = $(setting.hour$).val(dw.hour).focus(function(){
changeTmMenu("hh");
});
var iMinute = parseInt(dw.minute / dp.opts.mmStep) * dp.opts.mmStep;
var $minute = $(setting.minute$).val(iMinute).attr('step',dp.opts.mmStep).focus(function(){
changeTmMenu("mm");
});
var $second = $(setting.second$).val(dp.hasSecond() ? dw.second : 0).attr('step',dp.opts.ssStep).focus(function(){
changeTmMenu("ss");
});
$hour.add($minute).add($second).click(function(){return false});
clickTmMenu($hour,"hh");
clickTmMenu($minute,"mm");
clickTmMenu($second,"ss");
$(setting.box$).click(function(){
changeTmMenu();
});
var $inputs = $(setting.tmInputs$);
$inputs.keydown(keydownInt).each(function(){
var $input = $(this);
$input.keyup(function(){
changeTm($input, 0);
});
});
$(setting.tmUp$).click(function(){
$inputs.filter(".slt").each(function(){
changeTm($(this), 1);
});
});
$(setting.tmDown$).click(function(){
$inputs.filter(".slt").each(function(){
changeTm($(this), -1);
});
});
if (!dp.hasHour()) $hour.attr("disabled",true);
if (!dp.hasMinute()) $minute.attr("disabled",true);
if (!dp.hasSecond()) $second.attr("disabled",true);
}
}
function closeCalendar() {
$(setting.box$).remove();
$(document).unbind("click", closeCalendar);
}
$this.click(function(event){
closeCalendar();
var dp = new Datepicker($this.val(), opts);
var offset = $this.offset();
var iTop = offset.top+this.offsetHeight;
$(DWZ.frag['calendarFrag']).appendTo("body").css({
left:offset.left+'px',
top:iTop+'px'
}).show().click(function(event){
event.stopPropagation();
});
($.fn.bgiframe && $(setting.box$).bgiframe());
var dayNames = "";
$.each($.regional.datepicker.dayNames, function(i,v){
dayNames += "<dt>" + v + "</dt>"
});
$(setting.dayNames$).html(dayNames);
var dw = dp.getDateWrap();
var $year = $(setting.year$);
var yearstart = dp.getMinDate().getFullYear();
var yearend = dp.getMaxDate().getFullYear();
for(y=yearstart; y<=yearend; y++){
$year.append('<option value="'+ y +'"'+ (dw.year==y ? 'selected="selected"' : '') +'>'+ y +'</option>');
}
var $month = $(setting.month$);
$.each($.regional.datepicker.monthNames, function(i,v){
var m = i+1;
$month.append('<option value="'+ m +'"'+ (dw.month==m ? 'selected="selected"' : '') +'>'+ v +'</option>');
});
// generate calendar
generateCalendar(dp);
$year.add($month).change(function(){
dp.changeDate($year.val(), $month.val());
generateCalendar(dp);
});
// fix top
var iBoxH = $(setting.box$).outerHeight(true);
if (iTop > iBoxH && iTop > $(window).height()-iBoxH) {
$(setting.box$).css("top", offset.top - iBoxH);
}
$(setting.close$).click(function(){
closeCalendar();
});
$(setting.clearBut$).click(function(){
$this.val("");
closeCalendar();
// 添加日期改变监听(PineTree添加)
$this.change();
});
$(setting.okBut$).click(function(){
var $dd = $(setting.days$).find("dd.slt");
if ($dd.hasClass("disabled")) return false;
var date = dp.changeDay($dd.attr("day"), $dd.attr("chMonth"));
if (dp.hasTime()) {
date.setHours(parseInt($(setting.hour$).val()));
date.setMinutes(parseInt($(setting.minute$).val()));
date.setSeconds(parseInt($(setting.second$).val()));
}
$this.val(dp.formatDate(date));
closeCalendar();
// 添加日期改变监听(PineTree添加)
$this.change();
});
$(document).bind("click", closeCalendar);
return false;
});
$this.parent().find(setting.calIcon$).click(function(){
$this.trigger("click");
return false;
});
});
}
var Datepicker = function(sDate, opts) {
this.opts = $.extend({
pattern:'yyyy-MM-dd',
minDate:"1900-01-01",
maxDate:"2099-12-31",
mmStep:1,
ssStep:1
}, opts);
//动态minDate、maxDate
var now = new Date();
this.opts.minDate = now.formatDateTm(this.opts.minDate);
this.opts.maxDate = now.formatDateTm(this.opts.maxDate);
this.sDate = sDate.trim();
}
$.extend(Datepicker.prototype, {
get: function(name) {
return this.opts[name];
},
_getDays: function (y,m){//获取某年某月的天数
return m==2?(y%4||!(y%100)&&y%400?28:29):(/4|6|9|11/.test(m)?30:31);
},
_minMaxDate: function(sDate){
var _count = sDate.split('-').length -1;
var _format = 'y-M-d';
if (_count == 1) _format = 'y-M';
else if (_count == 0) _format = 'y';
return sDate.parseDate(_format);
},
getMinDate: function(){
return this._minMaxDate(this.opts.minDate);
},
getMaxDate: function(){
var _sDate = this.opts.maxDate;
var _count = _sDate.split('-').length -1;
var _date = this._minMaxDate(_sDate);
if (_count < 2) { //format:y-M、y
var _day = this._getDays(_date.getFullYear(), _date.getMonth()+1);
_date.setDate(_day);
if (_count == 0) {//format:y
_date.setMonth(11);
}
}
return _date;
},
getDateWrap: function(date){ //得到年,月,日
if (!date) date = this.parseDate(this.sDate) || new Date();
var y = date.getFullYear();
var m = date.getMonth()+1;
var days = this._getDays(y,m);
return {
year:y, month:m, day:date.getDate(),
hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds(),
days: days, date:date
}
},
/**
* @param {year:2010, month:05, day:24}
*/
changeDate: function(y, m, d){
var date = new Date(y, m - 1, d || 1);
this.sDate = this.formatDate(date);
return date;
},
changeDay: function(day, chMonth){
if (!chMonth) chMonth = 0;
var dw = this.getDateWrap();
return this.changeDate(dw.year, dw.month+parseInt(chMonth), day);
},
parseDate: function(sDate){
if (!sDate) return null;
return sDate.parseDate(this.opts.pattern);
},
formatDate: function(date){
return date.formatDate(this.opts.pattern);
},
hasHour: function() {
return this.opts.pattern.indexOf("H") != -1;
},
hasMinute: function() {
return this.opts.pattern.indexOf("m") != -1;
},
hasSecond: function() {
return this.opts.pattern.indexOf("s") != -1;
},
hasTime: function() {
return this.hasHour() || this.hasMinute() || this.hasSecond();
},
hasDate: function() {
var _dateKeys = ['y','M','d','E'];
for (var i=0; i<_dateKeys.length; i++){
if (this.opts.pattern.indexOf(_dateKeys[i]) != -1) return true;
}
return false;
}
});
})(jQuery);
- Angular.js中使用$watch监听模型变化
$watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...
- $scope.$watch()——监听数据变化
$scope.$watch(watchFn, watchAction, [deepWatch]):监听数据变化,三个参数 --watchFn:监听的对象,一个带有Angular 表达式或者函数的字符串 ...
- 如何使用NodeJs来监听文件变化
1.前言 在我们调试修改代码的时候,每修改一次代码,哪怕只是很小的修改,我们都需要手动重新build文件,然后再运行代码,看修改的效果,这样的效率特别低,对于开发者来说简直不能忍. 2.构建自动编译工 ...
- android动态注册监听网络变化异常
在使用广播接收器监听网络变化的时候,在AndroidManifest.xml中加入<user-permission android:name="android.permission.A ...
- Android 监听网络变化
Android 监听网络变化
- --@angularJS--$scope.watch监听模型变化
$watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...
- vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化
一.监听数据变化 1.监听数据变化有两种,深度和浅度,形式如下: vm.$watch(name,fnCb); //浅度 vm.$watch(name,fnCb,{deep:true}); //深度监视 ...
- webview缓存及跳转时截取url地址、监听页面变化
缓存及一些设定 我在做一些项目时,h5做的项目手机浏览器能使用,但是在搬到webview时候不能用,这个时候通过查阅资料,原来是webview没有设定好,包括缓存.缓存大小及路径等等 mWebview ...
- 对于单页应用中如何监听 URL 变化的思考
周末开发了一个在 GitHub 中给 repo 增加自定义备注的 chrome 扩展. 开发这个扩展的原因是我在 GitHub 中所 star 的项目实在太多了(截止目前 671 个),有的项目过个几 ...
- js动态监听dom变化
原生js 动态监听dom变化,根据不同的类型绑定不同的处理逻辑 // Firefox和Chrome早期版本中带有前缀 var MutationObserver = window.MutationO ...
随机推荐
- ubuntu16.04 源码安装Python3.7 (可以在此基础上安装Tensorflow) (确保Tensorflow计算框架与系统的彻底隔离)
Python3.7 源码下载: https://www.python.org/downloads/release/python-370/ 解压源码: tar -zxvf Python-3.7.0.tg ...
- sql_server角色成员身份权限
为便于管理数据库中的权限,SQL Server 提供了若干“角色”,这些角色是用于分组其他主体的安全主体.它们类似于 Microsoft Windows 操作系统中的组.数据库级角色的权限作用域为数据 ...
- Documentation/kobject.txt翻译--sysfs
你从未想过的关于kobjects,ksets和ktypes的一切:作者:Greg Kroah-Hartman <gregkh@linuxfoundation.org>:上次更新时间:200 ...
- 黄聪:VPS配置Filezilla Server支持FTP的Passive被动模式(FTP连接不上怎么办?有详细教程)
Filezilla Server的配置: 1.Filezilla默认的模式是Port模式,不是Passive被动模式.为了解决防火墙后的客户端连接问题,最好是启用Passive模式.要启动被动模式,首 ...
- ffmpeg+nginx+video实现rtsp流转hls流,通过H5查看监控视频
一.FFmpeg下载:http://ffmpeg.zeranoe.com/builds/ 下载并解压FFmpeg文件夹,配置环境变量:在“Path”变量原有变量值内容上加上d:\ffmpeg\bin, ...
- Java 正则表达式详细实例解析
案例1:判断字符串是否是abc package Regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * ...
- Partition does not start on physical sector boundary
今天给一块硬盘分区,用fdisk按照默认步骤执行,遇到这个问题: [root@bogon ~]# fdisk /dev/sdfDevice contains neither a valid DOS p ...
- 第八章(三)基于Listcheck适配器的访问控
denier适配器访问控制比较死板.Listchecker的适配器更加灵活. 定义handler: apiVersion: config.istio.io/v1alpha2 kind: listche ...
- 线程的等待方法:join
其实多线程最复杂的地方在于不同线程间的同步问题,这其中会涉及到先后执行问题.共享变量问题等.这篇文章我们主要来开个头,看一下join方法. using System; using System.Thr ...
- 正规式->最小化DFA说明
整体的步骤是三步: 一,先把正规式转换为NFA(非确定有穷自动机), 二,在把NFA通过"子集构造法"转化为DFA, 三,在把DFA通过"分割法"进行最小化 ...