jquery UI 의 datepicker를 이용해서 input 칸에 포커스 했을 때 달력이 나오고 날짜를 선택하면 input 칸에 값이 들어가는 기본 베이스를 사용하면서 아래와 조건이 있는 경우가 있어서 예제를 만들어 보았다.
- 특정 기간 범위 설정
- 특정 기간 범위만 활성화
- 시작 달력과 끝 달력에 오늘 이전 날짜들은 기본 비활성화 한다.
- 시작 달력과 끝 달력을 수차례 수정해도 특정 기간 범위를 넘길 수 없게 만듦
- 시작 달력과 끝 달력의 날짜 선택이 거꾸로 될 수 없게 만듦

기간 선택
시작일
~ 종료일
위 처럼 input을 두개 두고 시작 달력은 #from, 끝 달력은 #to 로 지정하였다.
var rangeDate = 31; // set limit day
var setSdate, setEdate;
$("#from").datepicker({
dateFormat: 'yy-mm-dd',
minDate: 0,
onSelect: function(selectDate){
var stxt = selectDate.split("-");
stxt[1] = stxt[1] - 1;
var sdate = new Date(stxt[0], stxt[1], stxt[2]);
var edate = new Date(stxt[0], stxt[1], stxt[2]);
edate.setDate(sdate.getDate() + rangeDate);
$('#to').datepicker('option', {
minDate: selectDate,
beforeShow : function () {
$("#to").datepicker( "option", "maxDate", edate );
setSdate = selectDate;
console.log(setSdate)
}});
//to 설정
}
//from 선택되었을 때
});
$("#to").datepicker({
dateFormat: 'yy-mm-dd',
onSelect : function(selectDate){
setEdate = selectDate;
console.log(setEdate)
}
});
rangeDate 는 특정 기간 범위이다.
예로 31일을 설정하였다.
이제 유효 검사를 추가해본다.
$('.btn').on('click', function(e){
if($('input#from').val() == ''){
alert('시작일을 선택해주세요.');
$('input#from').focus();
return false;
}else if($('input#to').val() == ''){
alert('종료일을 선택해주세요.');
$('input#to').focus();
return false;
}
var t1 = $('input#from').val().split("-");
var t2 = $('input#to').val().split("-");
var t1date = new Date(t1[0], t1[1], t1[2]);
var t2date = new Date(t2[0], t2[1], t2[2]);
var diff = t2date - t1date;
var currDay = 24 * 60 * 60 * 1000;
if(parseInt(diff/currDay) > rangeDate){
alert('로그 조회 기간은 ' + rangeDate + '일을 초과할 수 없습니다.');
return false;
}
alert("성공")
});
//조회 버튼 클릭
.btn이라는 클래스를 가진 버튼 엘리먼트를 누르면 검색 범위를 초과한 경우 다시 경고창이 뜨고 다시 설정하도록 인도한다.
아래 코드 결과 화면을 참고하자.