"며칠 걸려요?"라는 질문에 답이 셋인 까닭
10월 16일 금요일에 시작해서 10월 30일 금요일에 끝나는 일이 며칠짜리인지 물으면 사람마다 14일, 15일, 2주라고 답해요. 셋 다 틀린 말이 아니에요. 14일은 두 날짜 사이의 거리를 잰 값이고, 15일은 시작한 날과 끝나는 날을 모두 손가락으로 꼽은 값이에요. 2주는 같은 요일에서 같은 요일까지를 주 단위로 본 값이고요. 날짜 계산이 어긋나는 일의 대부분은 계산 실수가 아니라 이 셋 가운데 어느 질문에 답하는지를 정하지 않아서 생겨요.
이 사이트의 날짜 도구들은 같은 날짜 계산 코드를 함께 쓰는데, 도구마다 어느 질문에 답하는지가 달라요. 같은 두 날짜를 넣고 각 도구의 함수를 직접 돌려 보면 차이가 그대로 드러나요.
| 2026-10-16 → 2026-10-30을 넣은 곳 | 나오는 값 | 세는 방식 |
|---|---|---|
| 디데이 계산기 (기본) | D+14, 14일째 | 두 날짜의 거리 |
| 디데이 계산기 (기준일을 1일째로) | D+14, 15일째 | 첫날도 하루로 셈 |
| 경력 기간 계산기 | 15일 | 시작일과 끝날을 모두 셈 |
| 디데이 'N일 뒤' 칸에 30일 | 2026년 11월 15일 (일) | 시작일을 0일로 두고 더함 |
표의 마지막 줄은 기한을 정할 때 자주 쓰는 계산이에요. "오늘부터 30일 안에"라는 말을 시작일을 0일로 두고 읽으면 11월 15일까지이고, 시작일을 첫째 날로 세면 하루 이른 11월 14일 토요일까지예요. 어느 쪽을 쓸지는 도구가 대신 정해 줄 수 없어서, 결과를 옮기기 전에 이 표처럼 세는 방식부터 적어 두는 게 좋아요.
법이 정한 기본값: 초일 불산입과 말일의 끝
계약서나 공문처럼 효력이 걸린 기간은 민법의 기간 규정을 기본값으로 삼아요. 민법 제155조는 법령이나 재판상의 처분, 법률행위에 다르게 정한 바가 없으면 기간 계산을 이 장의 규정에 따른다고 적어요. 다시 말해 계약서에 따로 정한 방식이 있으면 그게 먼저이고, 없을 때 아래 규칙이 쓰여요. 이 글의 조문은 [시행 2026. 3. 17.] 민법을 2026년 10월 16일에 확인한 내용이에요.
- 시·분·초 단위: 제156조는 기간을 시, 분, 초로 정하면 즉시부터 센다고 정해요. "지금부터 48시간"은 지금 이 순간이 출발점이에요.
- 일·주·월·연 단위: 제157조는 기간의 첫날을 넣지 않되, 그 기간이 오전 영시부터 시작하면 넣는다고 정해요. 오후에 받은 통지의 "7일"은 다음 날부터 세고, "다음 달 1일부터 1년"처럼 하루가 시작될 때부터 출발하면 그날을 넣어요.
- 끝나는 순간: 제159조는 기간 말일이 끝나야 기간이 만료한다고 적어요. 말일 아침이 아니라 그날 자정까지가 기간이에요.
- 주말과 공휴일: 제161조는 기간 말일이 토요일이나 공휴일이면 그다음 날로 만료한다고 정해요.
위 표의 30일을 이 규칙으로 읽어 볼게요. 10월 16일 오후에 시작했다면 첫날은 빼고 17일부터 30일을 세니 말일은 11월 15일이고, 이는 시작일을 0일로 두고 30을 더한 디데이 계산기의 결과와 같아요. 그런데 11월 15일은 일요일이에요. 관공서의 공휴일에 관한 규정 제2조는 관공서 공휴일의 첫 번째로 일요일을 꼽고 있어서, 말일이 일요일에 걸리는 기간은 제161조와 함께 살펴봐야 해요. 도구는 주말이나 공휴일로 말일을 옮기지 않으니, 마지막 날의 요일은 꼭 따로 보세요.
윤년은 4년마다가 아니라 400년에 97번
천문법 제2조는 그레고리력을 1년의 길이를 365.2425일로 정하는 역법체계로, 윤년을 2월 29일을 더해 1년이 366일이 되는 해로 정의해요. 같은 법 제5조는 날짜를 양력인 그레고리력을 기준으로 계산한다고 적어요. 365.2425일은 400년 동안 윤년이 97번 들어가야 맞는 길이예요. 4년마다 넣으면 400년에 100번이라 세 번이 남는데, 이 세 번을 빼는 규칙이 100년과 400년 예외예요.
규칙을 문장으로 가장 분명하게 적은 공식 문서 하나는 자바스크립트의 국제 표준인 ECMA-262예요. 이 표준의 InLeapYear 절차는 연도를 400으로 나눠 떨어지면 윤년, 그렇지 않고 100으로 나눠 떨어지면 평년, 그렇지 않고 4로 나눠 떨어지면 윤년, 나머지는 평년으로 정해요. 순서가 중요해요. 4부터 확인하면 1900년을 윤년으로 잘못 판정하기 쉬워요. 이 사이트의 날짜 도구도 브라우저의 이 날짜 기능으로 계산하므로, 같은 규칙을 그대로 따라요.
| 연도 | 400의 배수 | 100의 배수 | 4의 배수 | 1년 날수 (도구 계산) | 2월 29일 입력 |
|---|---|---|---|---|---|
| 1900 | 아니요 | 예 | 예 | 365일 | 받지 않음 |
| 2000 | 예 | 예 | 예 | 366일 | 받음 |
| 2026 | 아니요 | 아니요 | 아니요 | 365일 | 받지 않음 |
| 2028 | 아니요 | 아니요 | 예 | 366일 | 받음 |
| 2100 | 아니요 | 예 | 예 | 365일 | 받지 않음 |
| 2400 | 예 | 예 | 예 | 366일 | 받음 |
표의 날수는 그해 1월 1일부터 다음 해 1월 1일까지의 거리를 도구 함수로 잰 값이고, 오른쪽 칸은 날짜를 읽는 함수가 'YYYY-02-29'를 날짜로 인정하는지예요. 2000년을 기억하는 사람이 많아서 100년마다 오는 예외를 겪어 본 사람은 드물지만, 2100년은 4의 배수인데도 2월이 28일에 끝나요. 엑셀이나 직접 만든 표에서 "4로 나눠 떨어지면 윤년"이라는 한 줄만 쓰면 2100년부터 하루가 어긋나요.
어느 날이 무슨 요일인지 셈으로 찾기
요일은 날수를 7로 나눈 나머지로 정해져요. ECMA-262의 WeekDay 절차는 1970년 1월 1일부터 지난 날수에 4를 더해 7로 나눈 나머지를 요일 번호로 쓰는데, 0이 일요일이고 1970년 1월 1일은 목요일이에요. 그래서 평년은 365일, 곧 52주 하고 하루라 같은 날짜의 요일이 이듬해에 하루 밀리고, 윤년의 2월 29일을 지나면 이틀 밀려요. 10월 16일로 확인해 보면 이렇게 나와요.
| 연도 | 10월 16일 요일 | 앞 해보다 |
|---|---|---|
| 2026 | 금 | 하루 |
| 2027 | 토 | 하루 |
| 2028 | 월 | 이틀 (2028년 2월 29일을 지남) |
| 2029 | 화 | 하루 |
| 2032 | 토 | 2031년 목요일에서 이틀 |
이 셈에는 재미있는 결과가 하나 있어요. 400년은 날수로 146,097일인데, 7로 나누면 정확히 20,871주로 나머지가 없어요. 도구 함수로 2000년 1월 1일과 2400년 1월 1일 사이를 재도 146,097일이 나오고, 두 날 모두 토요일이에요. 그레고리력 달력은 400년마다 요일까지 똑같이 되풀이된다는 뜻이에요. 반면 100년은 36,524일이나 36,525일이라 7로 나눠 떨어지지 않아서, 100년 전 달력을 그대로 쓸 수는 없어요.
"한 달 뒤"는 더할 때마다 말일이 깎여요
월 단위 계산은 날수 계산과 달리 규칙이 하나 더 필요해요. 1월 31일의 한 달 뒤는 2월에 31일이 없으니 어딘가로 옮겨야 하거든요. 민법 제160조 제3항은 월이나 연으로 정한 기간에서 마지막 달에 해당일이 없으면 그달 말일에 기간이 끝난다고 적고, 이 사이트의 날짜 코드도 같은 방향으로 그달 마지막 날에 맞춰요. 문제는 이 규칙을 한 번에 적용하느냐, 한 달씩 이어서 적용하느냐에 따라 결과가 달라진다는 점이에요.
| 2026-01-31에서 | 처음 날짜에서 바로 N개월 | 한 달씩 이어서 더하기 |
|---|---|---|
| 1개월 | 2026-02-28 | 2026-02-28 |
| 2개월 | 2026-03-31 | 2026-03-28 |
| 3개월 | 2026-04-30 | 2026-04-28 |
| 4개월 | 2026-05-31 | 2026-05-28 |
매달 말일에 내는 돈이나 매달 같은 날 하는 점검을 "지난번 날짜에 한 달 더하기"로 잡으면, 2월에 한 번 28일로 깎인 날짜가 그 뒤로 계속 28일에 머물러요. 반복 일정은 언제나 처음 날짜를 기준으로 N개월을 더해야 말일이 제자리를 지켜요.
되돌리는 계산도 조심해야 해요. 3월 31일에서 한 달을 빼면 2월 28일이지만, 그 2월 28일에 다시 한 달을 더하면 3월 28일이라 처음 날짜로 돌아오지 않아요. 길이를 잴 때도 비슷한 틈이 있어요. 도구의 '년·개월·일' 함수로 1월 31일부터 2월 28일 전날까지를 재면 1개월이 아니라 28일로 나와요. 한 달을 더한 결과가 2월 28일인데 그 거리를 다시 재면 한 달에 못 미친다고 나오는 셈이에요. 함수가 끝 날짜의 '일'이 시작 날짜의 '일'보다 작으면 한 달을 채우지 못했다고 보기 때문이에요. 월말이 끼는 기간은 개월 수와 함께 날수를 꼭 같이 적어 두세요.
자정, 시간대, 서머타임이 날짜를 바꿀 때
날짜만 다루는 계산도 '오늘이 며칠인지'를 정하는 순간에는 시각과 시간대가 끼어들어요. 표준시에 관한 법률은 우리나라 표준시를 동경 135도 자오선을 기준으로 정한다고 적고 있어요. 경도 15도가 1시간이라 135도는 협정 세계시보다 9시간 빠른 시각이에요. 그래서 한국 시각 10월 16일 오전 8시 30분은 협정 세계시로 아직 10월 15일 밤 11시 30분이에요. 해외 서버나 다른 나라 친구가 보는 '오늘'은 우리와 하루 다를 수 있어요.
이 사이트의 도구는 두 단계로 이 문제를 나눠요. '오늘' 칸은 기기의 시계와 시간대 설정에서 그 지역의 날짜를 한 번 읽어 와요. 그 뒤 날짜끼리의 계산은 모두 협정 세계시 자정으로 바꿔서 하고, 날수는 밀리초 차이를 하루 길이로 나눈 뒤 반올림해요. 서머타임이 있는 지역에서는 이 반올림이 중요해요. Node.js에서 시간대를 미국 뉴욕으로 바꿔 지역 시각으로 2026년 3월 8일 자정과 3월 9일 자정의 차이를 재 보면 23시간이 나오고, 이를 하루 길이로 나눠 버림하면 0일이 돼요. 11월 1일에서 2일까지는 25시간이에요. 같은 날짜를 도구 함수에 넣으면 두 경우 모두 1일이 나와요.
밤 11시 50분에 열어 둔 디데이 화면은 자정이 지나도 '오늘'을 다시 읽지 않아요. 날짜가 바뀐 뒤에는 화면을 새로 열고, 시간 단위로 정한 약속은 날짜 도구 대신 시각으로 직접 세세요.
날짜를 옮겨 적기 전에 확인하는 순서
- 질문 고르기: 두 날짜 사이의 거리인지, 첫날과 끝날을 모두 세는 날수인지, 시작일에서 N일 뒤의 날짜인지 먼저 정해요.
- 근거 찾기: 계약서나 안내문에 세는 방식이 적혀 있는지 보고, 없으면 민법 제157조처럼 첫날을 빼는지와 오전 영시 시작인지 확인해요.
- 도구 맞추기: 디데이 계산기의 '기준일을 1일째로 세기'나 N일 뒤 칸을 고른 방식에 맞춰 쓰고, 첫날을 넣는 기간이면 일수에서 하루를 빼서 넣어요.
- 말일 요일 보기: 결과 날짜가 토요일, 일요일, 공휴일에 걸리는지 확인해요. 도구는 날짜를 옮기지 않아요.
- 월말 점검: 개월 단위 일정이면 처음 날짜에서 바로 N개월을 더했는지, 29일·30일·31일이 깎이지 않았는지 봐요.
- 시간대 확인: 다른 나라 기준 마감이거나 자정 근처라면 그 지역 날짜로 '오늘' 칸을 직접 고쳐서 다시 계산해요.
알아 두기 이 글은 날짜를 세는 방식과 공식 규칙의 구조를 설명한 것이고, 특정 기한이 언제 끝나는지 판단하는 법률 상담이 아니에요. 소송, 행정 처분, 계약 해지처럼 기한이 중요한 일은 해당 법령이나 기관이 따로 정한 계산 방식이 있을 수 있으니 그 안내를 먼저 확인하세요.