날짜 계산은 머리로 하면 자주 틀립니다. 달마다 길이가 다르고, 윤년이 끼어들고, 주말을 빼야 할 때도 있습니다. 계약 만료일이 며칠 남았는지, 프로젝트 마감까지 실제 근무일이 얼마인지, 90일 뒤가 정확히 언제인지 — 이런 계산을 정확히 해 줍니다.
두 가지 모드가 있습니다. 두 날짜 차이는 시작일과 종료일 사이의 총 일수, 주, 개월, 근무일을 계산하고, 날짜 더하기·빼기는 기준일에 기간을 더하거나 빼서 결과 날짜를 구합니다. 근무 요일을 직접 지정할 수 있어 주 6일제나 특정 요일만 일하는 일정에도 맞출 수 있습니다.
사용 방법
- 모드 고르기 — 며칠이 남았는지 알고 싶으면 두 날짜 차이를, 특정 날짜로부터 며칠 뒤가 언제인지 알고 싶으면 날짜 더하기·빼기를 고릅니다. 오늘로 버튼을 누르면 시작일이나 기준일이 오늘 날짜로 채워집니다.
- 날짜 입력하기 — 달력에서 고르거나 직접 입력합니다. 입력하면 바로 아래에 요일까지 포함된 전체 날짜가 표시되므로, 잘못 입력했는지 바로 확인할 수 있습니다.
- 종료일 포함 여부 정하기 — 종료일 포함을 켜면 결과가 하루 늘어납니다. 이 선택이 실무에서 자주 문제가 됩니다. 대여 기간이나 휴가 일수처럼 '며칠간'을 세는 경우는 양 끝을 모두 포함해야 하고, 'D-day까지 며칠 남았나'를 세는 경우는 포함하지 않습니다.
- 근무 요일 지정하기 — 요일 버튼을 눌러 어떤 요일을 근무일로 셀지 정합니다. 기본은 월~금이고, 토요일을 포함하거나 특정 요일만 켜서 격주 근무·주말 근무 일정에도 맞출 수 있습니다. 근무일 수는 양 끝을 모두 포함해 셉니다.
자주 묻는 질문
'3개월 뒤'가 왜 92일이 되기도 하고 89일이 되기도 하나요?
달의 길이가 28일부터 31일까지 제각각이기 때문입니다. 1월 1일의 3개월 뒤(4월 1일)는 90일 후지만, 6월 1일의 3개월 뒤(9월 1일)는 92일 후입니다.
그래서 계약서를 쓸 때 '3개월'과 '90일'은 다른 기간입니다. 분쟁의 소지를 없애려면 어느 쪽 기준인지 명시하는 것이 좋습니다. 이 도구는 개월 수와 총 일수를 동시에 보여 주므로 두 기준의 차이를 바로 확인할 수 있습니다.
1월 31일에 1개월을 더하면 며칠이 되나요?
이 도구는 2월 말일(평년 28일, 윤년 29일)로 맞춥니다. 2월 31일이 존재하지 않으므로 그달의 마지막 날로 당기는 방식입니다.
자바스크립트의 기본 동작은 다릅니다. setMonth 로 계산하면 3월 3일로 넘어가 버립니다. 대부분의 사람이 '1월 31일의 한 달 뒤'를 2월 말로 이해하므로 여기서는 그 직관에 맞췄습니다. 다만 금융이나 법률 계산에서는 규칙이 따로 정해져 있는 경우가 많으니 해당 규정을 확인하세요.
근무일 계산에 공휴일이 빠지나요?
빠지지 않습니다. 지정한 요일만 근무일로 세고, 법정 공휴일이나 회사 휴무일은 반영하지 않습니다.
공휴일은 나라마다 다르고 해마다 날짜가 바뀌며(추석·설날은 음력 기준), 대체공휴일 규정까지 있어 정확히 반영하려면 국가별 달력 데이터가 필요합니다. 대략적인 근무일 수를 구한 뒤 해당 기간의 공휴일 수를 직접 빼서 쓰시면 됩니다.
D-day 계산에서 하루 차이가 납니다.
기준을 어떻게 잡느냐의 문제입니다. 흔히 '수능 D-100'이라고 할 때는 시험 당일을 D-day로 두고 그날을 세지 않습니다. 반면 '오늘부터 100일간'이라고 하면 오늘을 1일째로 셉니다.
종료일 포함 옵션이 정확히 이 차이를 다룹니다. 남은 날짜를 셀 때는 끄고, 기간의 길이를 셀 때는 켜세요. 기념일을 계산할 때 한국에서는 만난 날을 1일째로 세는 관습이 있어 100일이 실제로는 99일 후인 점도 이 차이에서 옵니다.
알아두면 좋은 개념
윤년 규칙은 생각보다 복잡하다
4로 나누어떨어지면 윤년이지만, 100으로 나누어떨어지면 평년이고, 다시 400으로 나누어떨어지면 윤년입니다. 그래서 1900년은 평년이었고 2000년은 윤년이었습니다.
이 예외 규칙 때문에 실제 버그가 발생한 적이 있습니다. 여러 소프트웨어가 '4의 배수'까지만 구현해 두어 2000년을 잘못 처리했고, 반대로 2100년(평년)에 같은 문제가 재발할 코드도 여전히 남아 있습니다. 날짜 계산은 직접 구현하지 말고 검증된 라이브러리나 언어 기본 기능을 쓰는 것이 원칙입니다.
ISO 주차가 연말에 헷갈리는 이유
ISO 8601은 월요일을 주의 시작으로 보고, 1월 4일이 포함된 주를 그 해의 1주차로 정합니다. 이 규칙 때문에 12월 마지막 며칠이 다음 해 1주차에 속하거나, 1월 초 며칠이 지난해 52·53주차에 속하는 일이 생깁니다.
주 단위로 집계하는 대시보드에서 연말 데이터가 이상하게 보이는 원인이 대개 이것입니다. 미국에서는 일요일을 주의 시작으로 보는 방식이 흔해서, 같은 날짜에 대해 도구마다 다른 주차가 나오기도 합니다. 팀 안에서 어떤 기준을 쓰는지 합의해 두는 것이 좋습니다.
날짜만 다룰 때는 시간을 버려라
'며칠 차이'를 계산하면서 시각이 섞이면 결과가 흔들립니다. 8월 1일 오후 11시와 8월 2일 오전 1시는 2시간 차이지만 날짜로는 하루 차이입니다. 시간까지 포함해 24로 나누면 0일이 나옵니다.
그래서 날짜만 다루는 계산에서는 시·분·초를 버리고 자정으로 맞춘 뒤 비교해야 합니다. 이 도구도 그렇게 처리합니다. 데이터베이스에서도 시각이 필요 없는 값은 TIMESTAMP 대신 DATE 타입을 쓰는 편이 이런 혼란과 타임존 문제를 함께 피할 수 있습니다.