在项目中遇到了一个需求,在某种情况下日期只能选择每个月的最后一天:使用fish中的组件datetimepicker,具体代码如下:
setTime: function(){
var me =this;
$("input[paramid='000001']").datetimepicker("destroy").datetimepicker({viewType:'date',todayBtn: false,format:"yyyy-mm-dd",
//初始化当前月、上一月份、下一月份不是最后一天的都不可选
show :function(e, value){
//不可选的日期数组
var disableArr1 = [];
var now = new Date();
if(value.date != null){
now = value.date;
}
var fullYear = now.getFullYear();
var month = now.getMonth()+1; // getMonth 方法返回 0-11,代表1-12月
//当月的不可选天
me.setDisableDay(fullYear,month,0,disableArr1);
//上一个不可选天
me.setDisableDay(fullYear,month,-1,disableArr1);
//下一个不可选天
me.setDisableDay(fullYear,month,1,disableArr1);
//下下个月不能选
me.setDisableDay(fullYear,month,2,disableArr1);
$("input[paramid='0000000008']").datetimepicker("setDatesDisabled", disableArr1);
},
// 月份改变的时候,当前月份、上一月份下一月份不是最后一天的都加入不可选
changeMonth : function (e, value) {
//不可选的日期数组
var disableArr=[];
var fullYear = value.date.getFullYear();
var month = value.date.getMonth()+1; // getMonth 方法返回 0-11,代表1-12月
var endOfMonth1 = new Date(fullYear, month, 0); // 获取本月最后一天
//当月的不可选天
me.setDisableDay(fullYear,month,0,disableArr);
//上一个不可选天
me.setDisableDay(fullYear,month,-1,disableArr);
//下一个不可选天
me.setDisableDay(fullYear,month,1,disableArr);
$("input[paramid='000001']").datetimepicker("setDate", endOfMonth1);
$("input[paramid='000001']").datetimepicker("setDatesDisabled", disableArr);
},
//选择日期,判断是否选择了开始时间,然后计算订购时长
changeDate : function(e,value){
//订购开始日期已选
var startDate = $("input[paramid='000002']").val();
var endDate = $("input[paramid='000001']").val();
if(startDate == ''){
fish.warn("请先选择订购开始时间");
$("input[paramid='000001']").datetimepicker("hide");
$("input[paramid='000001']").val('');
return;
}else if(endDate <= startDate ){
fish.warn("订购结束时间必须大于订购开始时间");
$("input[paramid='000001']").val('');
return;
}
//计算订购时长
startDate = startDate.split('-');
// 得到月数
startDate = parseInt(startDate[0]) * 12 + parseInt(startDate[1]);
// 拆分年月日
endDate = endDate.split('-');
// 得到月数
endDate = parseInt(endDate[0]) * 12 + parseInt(endDate[1]);
var times = Math.abs(startDate - endDate);
$("input[paramid='0000003']").attr("value",times);
},
});
},
//设置某个月份不可选
setDisableDay:function(fullYear,month,num,disableArray){
//下下个月不能选
var month = month+num;
var endOfMonth;
if(num > 0 && month==13){
month=1;
endOfMonth = new Date(fullYear+1, month, 0); // 获取本月最后一天
}else if(num == -1 && month==12){
month = 12;
endOfMonth = new Date(fullYear-1, month2, 0); // 获取本月最后一天
}else{
endOfMonth = new Date(fullYear, month, 0); // 获取本月最后一天
}
if(month<10){
month="0"+month;
}
for(var i=0;i< endOfMonth.getDate()-1;i++){
var day ="";
if((i+1)<10){
day="0"+(i+1);
}else{
day=i+1;
}
disableArray.push(endOfMonth.getFullYear()+"-"+month+"-"+day);
}
}
}
以上代码就能控制日期只能选择每个月的最后一天