先上效果圖
jsp月份選擇
<input name="sdate" id="sdate" class="layui-input" lay-key="17" type="text" />
級聯周
<select name="edate" id="edate" lay-filter="edateFilter"></select>
$(function () {
initSelect(getInfo('<%=sdate %>'));
laydate.render({
elem : '#sdate',
type: 'month',change: function(value, date, endDate){ //選擇月份的時候重置周下拉框
$('#sdate').val(value);
$('#layui-laydate17').remove();//刪除
initSelect(getInfo(value));
}
});
});
function initSelect(array){
layui.use(['form' ], function() {
var form=layui.form;
$('#edate').empty();
for(var j=0;j<array.length;j++){
var obj = array[j];
var flag = isDateBetween('<%=edate %>',obj.from,obj.to);
var ss = '<option value="' +obj.from+'=='+obj.to + '"';
if(flag){
ss += ' selected ';
curr1 = obj.from; curr2 = obj.to;
}
ss += ' >'+ formatName(j,obj.from,obj.to)+ '</option>';
$('#edate').append(ss);
}
form.render('select');
});
}
/**
* 判斷日期是否在區間內,在區間內返回true,否返回false
* @param dateString 日期字符串
* @param startDateString 區間開始日期字符串
* @param endDateString 區間結束日期字符串
* @returns {Number}
*/
function isDateBetween(dateString, startDateString, endDateString){
if(isEmpty(dateString)){
alert("dateString不能爲空");
return;
}
if(isEmpty(startDateString)){
alert("startDateString不能爲空");
return;
}
if(isEmpty(endDateString)){
alert("endDateString不能爲空");
return;
}
var flag = false;
var startFlag = (dateCompare(dateString, startDateString) < 1);
var endFlag = (dateCompare(dateString, endDateString) > -1);
if(startFlag && endFlag){
flag = true;
}
return flag;
};
function dateCompare(dateString, compareDateString){
if(isEmpty(dateString)){
alert("dateString不能爲空");
return;
}
if(isEmpty(compareDateString)){
alert("compareDateString不能爲空");
return;
}
var dateTime = dateParse(dateString).getTime();
var compareDateTime = dateParse(compareDateString).getTime();
if(compareDateTime > dateTime){
return 1;
}else if(compareDateTime == dateTime){
return 0;
}else{
return -1;
}
};
function dateParse(dateString){
var SEPARATOR_BAR = "-";
var SEPARATOR_SLASH = "/";
var SEPARATOR_DOT = ".";
var dateArray;
if(dateString.indexOf(SEPARATOR_BAR) > -1){
dateArray = dateString.split(SEPARATOR_BAR);
}else if(dateString.indexOf(SEPARATOR_SLASH) > -1){
dateArray = dateString.split(SEPARATOR_SLASH);
}else{
dateArray = dateString.split(SEPARATOR_DOT);
}
return new Date(dateArray[0], dateArray[1]-1, dateArray[2]);
};
function formatName(val,from,to){
var str = '第';
if(val == 0){ str += '一';
}else if(val == 1){ str += '二';
}else if(val == 2){ str += '三';
}else if(val == 3){ str += '四';
}else if(val == 4){ str += '五';
}else if(val == 5){ str += '六';
}else if(val == 6){str += '七'; }
str += '周(';
var fromDate = new Date(from);
str += (fromDate.getMonth() + 1) + '月' + fromDate.getDate()+'日';
str += ' - ';
var toDate = new Date(to);
str += (toDate.getMonth() + 1) + '月' + toDate.getDate()+'日';
str += ')';
return str;
}
function getInfo(val) {
var array = new Array();
var year = parseInt(val.split('-')[0],10),
month = parseInt(val.split('-')[1],10);
var d = new Date();
d.setFullYear(year, month-1, 1);
var w1 = d.getDay();
if (w1 == 0) w1 = 7;
d.setFullYear(year, month, 0);
var dd = d.getDate();
if (w1 != 1) d1 = 7 - w1 + 2;
else d1 = 1;
week_count = Math.ceil((dd-d1+1)/7);
for (var i = 0; i < week_count; i++) {
var monday = d1+i*7;
var sunday = monday + 6;
var from = year+'-'+formatD(month)+'-'+formatD(monday);
var to = '';
if (sunday <= dd) {
to = year+'-'+formatD(month)+'-'+formatD(sunday);
} else {
d.setFullYear(year, month-1, sunday);
to = d.getFullYear()+'-'+formatD(d.getMonth()+1)+'-'+formatD(d.getDate());
}
if(i == 0){//第一次循環的時候 判斷第一個星期一是否爲1號,如果不是加上包含1號的跨月 周
var data = from.split('-');
var mm = new Date();
mm.setFullYear(data[0], data[1]-1, data[2]);
var A = mm.getDate();
if(A > 1){ //不是1號
var B = new Date();
B.setFullYear(data[0], data[1]-1, A-1);
var t = GetDay(B);
var f = GetMonday(B);
var obj = new Object();
obj.from = f; obj.to = t;
array.push(obj);
}
}
var obj = new Object();
obj.from = from; obj.to = to;
array.push(obj);
}
return array;
}
function formatD(val){
var dd = parseInt(val,10);
if(dd < 10){
return '0'+dd;
}else{
return dd+'';
}
}
function GetMonday(dd) {
var week = dd.getDay(); //獲取時間的星期數
var minus = week ? week - 1 : 6;
dd.setDate(dd.getDate() - minus); //獲取minus天前的日期
var y = dd.getFullYear();
var m = dd.getMonth() + 1; //獲取月份
if(m < 10) m = '0' + m;
var d = dd.getDate();
if(d < 10) d = '0' + d;
return y + '-' + m + '-' + d;
}
function GetDay(dd){
var y = dd.getFullYear();
var m = dd.getMonth() + 1; //獲取月份
if(m < 10) m = '0' + m;
var d = dd.getDate();
if(d < 10) d = '0' + d;
return y + '-' + m + '-' + d;
}