회사 내부 시스템을 만들다 보면 날짜 계산이 자주 필요하다. 급여일까지 며칠 남았는지, 프로젝트 마감까지 몇 주인지, 계약 만료일은 언제인지. D-Day 계산기의 원리를 이해하면 이런 기능을 쉽게 구현할 수 있다.
두 날짜 사이 일수 계산
JavaScript에서 두 날짜 사이 일수를 계산하는 건 간단하다.
function getDaysBetween(date1, date2) { const diffTime = Math.abs(date2 - date1); return Math.ceil(diffTime / (1000 * 60 * 60 * 24)); }
하지만 실무에서는 여기에 고려할 게 더 많다. 영업일만 계산해야 하는 경우, 공휴일을 제외해야 하는 경우 등이다. llne.kr/dday-calc에서 기본적인 D-Day 계산을 해볼 수 있다.
급여일 계산의 특수성
급여일이 주말이나 공휴일이면 보통 그 전 영업일에 지급한다. 이걸 계산하려면 공휴일 데이터가 필요하다. 한국의 공휴일은 매년 다르고, 대체휴일도 있어서 API로 관리하는 게 좋다.
function getPayday(year, month, baseDay) { let payday = new Date(year, month - 1, baseDay); while (isWeekend(payday) || isHoliday(payday)) { payday.setDate(payday.getDate() - 1); } return payday; }
프로젝트 일정 관리
프로젝트 마감일을 관리할 때는 주 단위, 월 단위 계산도 필요하다. 2주 전 알림, 1개월 전 리뷰 같은 마일스톤을 자동으로 계산해서 캘린더에 등록하면 편하다.
그런데 1개월 전이라는 게 모호할 수 있다. 3월 31일의 1개월 전은 2월 31일인데, 그런 날은 없다. 이런 엣지 케이스를 어떻게 처리할지 정의해야 한다. 보통 해당 월의 말일로 처리한다.
계약 만료 알림
HR 시스템에서는 계약직 직원의 계약 만료일 관리가 중요하다. 만료 90일 전, 60일 전, 30일 전에 알림을 보내서 재계약 여부를 결정할 수 있게 한다. D-Day 계산 로직을 배치 작업에 적용하면 매일 자동으로 알림 대상을 추출할 수 있다.
타임존 주의사항
날짜 계산에서 자주 하는 실수가 타임존 처리다. 서버가 UTC 기준이고 사용자가 KST라면 날짜가 하루 차이 날 수 있다. 급여일처럼 중요한 날짜는 타임존을 명시적으로 처리해야 한다.
마치며
날짜 계산은 단순해 보이지만 영업일, 공휴일, 타임존 등 고려할 게 많다. 복잡한 계산이 부담스럽다면 온라인 D-Day 계산기를 활용해보자.