
진행 중인 프로젝트에서 거래내역을 조회하는데 일자 필터를 적용해야했다. 호기롭게 직접 구현할 생각을 하고 있었다. 하지만 날짜 입력 유효성 검사, 캘린더 UI 모달 닫힘, 날짜형식 변환 등 구현할 것들을 생각하니 라이브러리를 활용하는 것이 가장 좋은 선택인 것 같아. 일자 필터 라이브러리를 찾아보았다.
기획서와 가장 일치하는 UI를 가지고 있는게 Date Range Picker라 채택하게 되었다. 추가 적인 커스텀 작업이 가장 덜 필요하기 때문이였다.
<!-- css -->
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css"/>
<!-- js-->
<script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
// 문서가 로드되면 함수 실행
$(document).ready(function () {
// 'data-date' 이름의 input 요소에 daterangepicker 설정
$('input[name="data-date"]').daterangepicker({
// 로케일 설정 (한국어 날짜 포맷과 레이블)
locale: {
format: 'YYYY/MM/DD', // 날짜 표시 형식
separator: ' ~ ', // 시작 날짜와 종료 날짜 사이의 구분자
applyLabel: '적용', // 적용 버튼의 텍스트
cancelLabel: '취소', // 취소 버튼의 텍스트
monthNames: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], // 월 이름
daysOfWeek: ["일", "월", "화", "수", "목", "금", "토"], // 요일 이름
customRangeLabel: '사용자 지정' // 사용자 지정 범위의 텍스트
},
// 범위 설정
ranges: {
'이번 달': [moment().startOf('month'), moment().endOf('month')], // 이번 달 전체
'지난 달': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')], // 지난 달 전체
'지난 7일': [moment().subtract(6, 'days'), moment()], // 최근 7일
'지난 14일': [moment().subtract(13, 'days'), moment()], // 최근 14일
'지난 60일': [moment().subtract(59, 'days'), moment()], // 최근 60일
'지난 3개월': [moment().subtract(3, 'months').startOf('month'), moment().endOf('month')], // 최근 3개월
'지난 6개월': [moment().subtract(6, 'months').startOf('month'), moment().endOf('month')] // 최근 6개월
},
showDropdowns: true, // 년/월 선택 드롭다운을 항상 표시
alwaysShowCalendars: true, // 캘린더가 항상 보이도록 설정
opens: "left", // 달력 표시 방향 설정 (왼쪽으로 열림)
linkedCalendars: false // 시작과 종료 날짜의 연결 여부 설정 (false면 독립적)
});
});
Date Range Picker 홈페이지에서 옵션을 선택해서 어떻게 적용되는지 어떤 옵션이 있는지 보여준다. 또한 아래 js 파일도 같이 준다. 굉장히 친절한 사이트다. 본 받아야하는 사이트인 것 깉다.



input 태그의 타입이 text로 되어 있어 영문, 한문이 입력 가능하다. 물론 입력 완료시 다시 날짜 형식으로 변환되지만 숫자를 제외한 입력은 막는 것이 좋아 보인다.

캘린더가 노출후 좌우로 스크롤이 가능할경우 캘린더 UI가 화면에 고정되어 움직인다. 추가 기획이 필요해 보인다.