JavaScript/JQuery
Javascript DatePicker 사용법(시작날짜와 종료날짜 날짜 제한)
BBB.OOO
2024. 5. 14. 14:52
반응형
개발 환경 : Jquery, datepicker
datepicker 를 사용해 시작날짜와 종료날짜를 선택하는데 최대 10일까지 선택할 수 있도록
기능 구현이 필요했다.
시작 날짜를 선택했을 때 종료날짜와 비교해 10일을 초과했을 경우 시작날짜 기준으로 종료날짜를
시작날짜 + 10일로 변경하도록 기능 구현했다.
HTML
시작날짜 : <input class="callflow-date-start"/ ><br/>
종료날짜 : <input class="callflow-date-end" />
javascript
$('.callflow-date-start').datepicker({
changeMonth: true,
changeYear: true,
selectOtherMonths: true,
showButtonPanel: true,
yearRange: "c-50:c+50",
dateFormat: "yy-mm-dd",
onSelect: function(selectedDate){
var start = $(this).datepicker('getDate');
var endDate = $('.callflow-date-end').datepicker('getDate');
var diffDate = start.getTime() - endDate.getTime();
var diffDay = Math.abs(diffDate / (1000 * 60 * 60 * 24));
if(diffDay > 10){
alert('최대 10일까지 검색 가능합니다.');
var startTemp = new Date(start);
startTemp.setDate(start.getDate() + 10);
var endDateStr = startTemp.getFullYear() + '-'
+ ((startTemp.getMonth() + 1) > 10 ? (startTemp.getMonth() + 1) : ("0" + (startTemp.getMonth() + 1))) + '-'
+ startTemp.getDate();
$('.callflow-date-end').datepicker('option', 'minDate', new Date(start.getTime()));
$('.callflow-date-end').datepicker('setDate', endDateStr);
}else {
$('.callflow-date-end').datepicker('option', 'minDate', new Date(start.getTime()));
}
}
})
$('.callflow-date-end').datepicker({
changeMonth: true,
changeYear: true,
selectOtherMonths: true,
showButtonPanel: true,
yearRange: "c-50:c+50",
dateFormat: "yy-mm-dd",
onSelect: function(selectedDate){
var end = $(this).datepicker('getDate');
var startDate = $('.callflow-date-start').datepicker('getDate');
var diffDate = startDate.getTime() - end.getTime();
var diffDay = Math.abs(diffDate / (1000 * 60 * 60 * 24));
if(diffDay > 10){
alert('최대 10일까지 검색 가능합니다.');
var endTemp = new Date(end);
endTemp.setDate(end.getDate() + 10);
var startDateStr = endTemp.getFullYear() + '-'
+ ((endTemp.getMonth() + 1) > 10 ? (endTemp.getMonth() + 1) : ("0" + (endTemp.getMonth() + 1))) + '-'
+ endTemp.getDate();
$('.callflow-date-start').datepicker('option', 'minDate', new Date(end.getTime()));
$('.callflow-date-start').datepicker('setDate', startDateStr);
}else {
$('.callflow-date-start').datepicker('option', 'minDate', new Date(end.getTime()));
}
}
})
var start = $(this).datepicker('getDate');
var endDate = $('.callflow-date-end').datepicker('getDate');
시작날짜와 종료날짜를 datepicker 의 getDate 함수를 통해 선택 날짜를 불러온다.
var diffDate = start.getTime() - endDate.getTime();
var diffDay = Math.abs(diffDate / (1000 * 60 * 60 * 24));
getTime() 메서드를 통해 해당 날짜의 시간을 밀리초로 계산하여 값을 반환한다.
시작날짜의 밀리초 - 종료날짜의 밀리초 를 통해 시간이 얼마나 지났는지 판단한다.
뺀값에 1000을 곱하면 초가 되며, 60을 곱하여 분, 60을 곱하면 시간, 24를 곱하면 Day인 날짜가 된다.
diffDay 가 시작날짜와 종료날짜가 몇일차이인지 나온다.
var startTemp = new Date(start);
startTemp.setDate(start.getDate() + 10);
start(시작날짜) 선택 날짜 기준으로 새로운 Date 객체를 생성하고 해당 날짜에 선택날짜 + 10일을 한다.
var endDateStr = startTemp.getFullYear() + '-' + ((startTemp.getMonth() + 1) > 10 ?
(startTemp.getMonth() + 1) : ("0" + (startTemp.getMonth() + 1))) + '-' + startTemp.getDate();
날짜를 "yyyy-MM-dd" 형식의 문자열로 만든다.
$('.callflow-date-end').datepicker('option', 'minDate', new Date(start.getTime()));
$('.callflow-date-end').datepicker('setDate', endDateStr);
종료날짜를 datepicker 의 option 인 minDate(최소날짜) 함수를 사용해
선택날짜 기준으로 최소날짜를 변경한다.
이렇게 최소날짜를 변경하게 되면 종료날짜의 datepicker 에서는 시작날짜부터 선택할 수 있게 된다.
datepicker 의 setDate() 함수를 통해 시작날짜의 최소 + 10 일로 변경해준다.
반응형