에너지 관점 스터디:에관스

컴활 1급 · Access 날짜 계산

컴활 1급 Date DateAdd DateDiff 차이: 날짜 계산 예제로 구분하기

두음 암기는 오늘·더해·차이입니다. Date는 오늘 날짜, DateAdd는 기준 날짜에 간격을 더하거나 빼서 만든 새 날짜, DateDiff는 두 날짜 사이의 지정 간격 수를 구합니다.

정답이 날짜여야 하는지 숫자여야 하는지 먼저 보세요. 오늘을 표시하면 Date(), 주문일에서 7일 뒤를 찾으면 DateAdd("d", 7, [주문일]), 주문일부터 발송일까지 며칠인지 묻는다면 DateDiff("d", [주문일], [발송일])입니다.

헷갈리는 지점은 함수 이름보다 반환값과 인수 순서입니다. DateAdd의 두 번째 인수는 더할 수이고, DateDiff의 두 번째 인수는 첫 날짜입니다. 한 달 더하기를 30일 더하기와 같다고 보거나, 연도 차이를 그대로 만 나이로 읽는 실수도 함께 확인하겠습니다.

Access Date의 오늘 날짜, DateAdd의 날짜 이동, DateDiff의 간격 수, interval의 단위를 오늘·더해·차이로 비교한 컴활 1급 인포그래픽
오늘·더해·차이로 반환값부터 구별합니다. 월말 보정, 음수 결과, m·n 단위와 Now의 시간 포함 여부는 본문 예제로 확인하세요.
작성에관스 컴활 1급 학습팀 발행2026년 10월 1일 수정2026년 10월 1일 주제Access 날짜 계산

핵심 포인트

이 글에서 먼저 챙길 것

  • Date()는 시스템의 현재 날짜, Now()는 현재 날짜와 시간을 반환합니다.
  • DateAdd(interval, number, date)는 이동한 날짜를 반환하고 음수 number로 이전 날짜를 구합니다.
  • DateDiff(interval, date1, date2)는 간격 수를 반환하며 date1이 더 늦으면 음수입니다.
  • Access 간격 문자열에서 m은 월, n은 분입니다. 단위에는 따옴표를 씁니다.
  • 월말의 DateAdd는 유효한 날짜로 보정하고 DateDiff의 yyyy는 완료된 나이를 뜻하지 않습니다.

본문

컴활 1급 공부 기준을 더 구체적으로 보기

세 함수의 차이는 반환값부터 보세요

Date()는 별도의 날짜 입력 없이 현재 날짜를 구합니다. DateAdd("d", 7, [주문일])는 주문일이라는 날짜를 받아 새로운 날짜를 만들고, DateDiff("d", [주문일], [발송일])는 두 날짜를 받아 간격 수를 만듭니다. 같은 날짜 문제여도 필요한 답의 종류가 다릅니다.

오늘·더해·차이를 그대로 질문에 대응시키세요. 오늘은 무엇인가, 기준일에서 며칠 후인가, 두 날짜가 며칠 차이인가로 바꾸면 함수 이름을 고르기 쉽습니다. 날짜 결과는 Date·DateAdd, 숫자 결과는 DateDiff라는 첫 분류가 핵심입니다.

형식상 Date와 DateAdd는 날짜를 담은 Variant(Date), DateDiff는 간격 수를 담은 Variant(Long)를 반환합니다. 아래 고정 날짜 예제는 그레고리력을 기준으로 만들었고 결과를 yyyy-mm-dd로 적었습니다. 화면의 실제 표시 형식은 환경과 속성에 따라 달라질 수 있습니다.

Date와 Now: 오늘 날짜만 필요한가, 시간도 필요한가

Access 식에서 Date()는 컴퓨터 시스템의 현재 날짜를 반환합니다. 폼의 계산 컨트롤에 =Date()를 쓰면 오늘 날짜를 표시할 수 있습니다. 날짜가 필요한 자리에 텍스트로 작성한 오늘의 날짜를 넣으면 다음 날 자동으로 바뀌지 않는다는 점이 차이입니다.

Now()는 날짜와 시간을 함께 반환합니다. 기록 시각을 남기는 문제라면 날짜만 있는 Date()와 구분해야 합니다. Now() 결과를 날짜 형식으로만 표시했다고 해서 값 안의 시간이 사라진 것은 아닙니다.

VBA 코드에서는 currentDay = Date, currentMoment = Now처럼 괄호 없이 값을 대입할 수도 있습니다. Access 계산식의 Date()·Now()와 VBA의 Date·Now를 서로 다른 함수로 외울 필요는 없습니다. 표시하는 모양과 반환값의 내용부터 구별하세요.

DateAdd: 단위, 더할 수, 기준 날짜 순서입니다

DateAdd(interval, number, date)의 순서는 단위 -> 더할 수 -> 기준 날짜입니다. DateAdd("d", 3, DateSerial(2026, 9, 28))의 결과는 2026-10-01입니다. 일 단위로 3을 더한 새로운 날짜가 답이며, 숫자 3을 반환하는 함수가 아닙니다.

이전 날짜가 필요하면 두 번째 인수를 음수로 둡니다. DateAdd("d", -3, DateSerial(2026, 10, 1))은 2026-09-28입니다. 음수는 날짜 자체가 음수라는 뜻이 아니라 기준일에서 과거 방향으로 이동한다는 뜻입니다.

DateSerial(연, 월, 일)은 고정 날짜를 만들기 위한 보조 함수입니다. 예제에서는 2026, 9, 28처럼 연·월·일을 분리해 써 날짜 문자열의 지역별 해석에 기대지 않았습니다. 함수 결과를 날짜로 받아 계산하는 흐름에 집중하세요.

DateAdd의 한 달은 30일과 같지 않습니다

DateAdd("m", 1, DateSerial(2026, 1, 31))의 결과는 2026-02-28입니다. 달을 하나 이동한 뒤 해당 월에 31일이 없기 때문에 유효한 월말로 보정됩니다. 2026-02-31 같은 잘못된 날짜를 만들지 않습니다.

반면 DateAdd("d", 30, DateSerial(2026, 1, 31))은 2026-03-02입니다. 여기서는 달 이동이 아니라 30일 이동을 수행합니다. 한 달 뒤와 30일 뒤를 같은 표현으로 취급하면 보기에서 결과를 잘못 고를 수 있습니다.

월말 보정이 일어나면 더했다가 빼도 원래 날짜로 돌아오지 않을 수 있습니다. 2026-01-31에서 한 달 더한 2026-02-28을 다시 한 달 빼면 2026-01-28입니다. 단위가 월일 때는 시작일의 일 숫자를 무조건 보존한다고 생각하지 마세요.

DateDiff: 두 날짜의 간격 수를 구합니다

DateDiff(interval, date1, date2)의 두 번째·세 번째 인수는 날짜입니다. DateDiff("d", DateSerial(2026, 9, 28), DateSerial(2026, 10, 1))의 결과는 3입니다. 반환값 3은 지정한 일 단위의 차이이며 날짜 2026-10-01이 아닙니다.

방향도 확인해야 합니다. DateDiff("d", DateSerial(2026, 10, 1), DateSerial(2026, 9, 28))처럼 앞 날짜가 더 늦으면 결과는 -3입니다. 같은 날짜를 같은 단위로 비교하면 0이 됩니다.

지문이 주문 후 발송까지 걸린 일수라면 주문일을 date1, 발송일을 date2에 둡니다. 남은 일수를 묻는다면 오늘을 date1, 마감일을 date2로 두는 식입니다. 날짜 두 개를 모두 적었어도 순서를 바꾸면 의미와 부호가 달라집니다.

DateDiff의 연도 차이는 만 나이가 아닙니다

DateDiff("yyyy", DateSerial(2026, 12, 31), DateSerial(2027, 1, 1))은 1입니다. 하루만 지났지만 연도가 바뀌었기 때문입니다. 여기서 1을 만 1년이 모두 지났다는 뜻으로 해석하면 안 됩니다.

월 단위도 같은 주의를 해야 합니다. DateDiff("m", DateSerial(2026, 1, 31), DateSerial(2026, 2, 1))은 1입니다. 이 값은 30일이나 31일이 완전히 경과했다는 판정이 아닙니다. 계산 단위에 따른 달력상의 차이를 읽어야 합니다.

따라서 생년월일과 오늘 날짜에 yyyy를 썼다는 이유만으로 정확한 만 나이라고 단정하지 않습니다. 생일을 지났는지 같은 추가 조건이 필요합니다. 이 글에서는 나이 계산 전체가 아니라 DateDiff 반환값을 과하게 해석하지 않는 기준만 다룹니다.

interval에서 m은 월, n은 분입니다

Access의 간격 인수는 문자열입니다. "yyyy"는 연, "q"는 분기, "m"은 월, "d"는 일, "h"는 시, "n"은 분, "s"는 초를 나타냅니다. DateAdd와 DateDiff 모두 필요한 단위를 첫 인수로 확인하세요.

30분 뒤를 구하려면 DateAdd("n", 30, Now())입니다. DateAdd("m", 30, Now())라고 쓰면 30분이 아니라 30개월 이동이 됩니다. m을 minute의 첫 글자라고 추측하는 것이 대표적인 오답입니다.

구조가 맞아도 단위가 틀리면 정답은 아닙니다. yyyy·m·d·h·n·s를 긴 정의로 외우기보다 연·월·일·시·분·초와 차례로 연결해 말해보세요. 이 interval 규칙을 날짜를 보여주는 Format의 모든 표시 기호에 그대로 적용하지는 않습니다.

DateAdd의 w는 영업일만 더하지 않습니다

DateAdd에서 "w"를 지정해도 토요일·일요일을 제외한 근무일만 더하는 것은 아닙니다. Microsoft 문서는 일주일의 모든 날짜를 포함해 지정한 일수를 더한다고 설명합니다.

따라서 DateAdd("w", 1, DateSerial(2026, 10, 2))의 결과는 다음 날인 2026-10-03입니다. 주말이나 공휴일을 자동으로 건너뛰는 함수라고 설명한 보기는 지울 수 있습니다. 별도의 업무일 달력을 처리하는 계산과 구분하세요.

이 설명은 DateAdd의 w 동작입니다. DateDiff의 w·ww는 주 간격을 계산하는 별도의 규칙과 선택 인수가 있으므로, 일수를 구하는 DateDiff 문제에서 w를 d의 동의어처럼 사용하지 마세요.

Access 쿼리와 폼에서 식을 읽는 방법

쿼리 디자인의 계산 필드에 배송기한: DateAdd("d", 7, [주문일])을 쓰면 주문일보다 7일 뒤인 날짜를 배송기한이라는 열로 만듭니다. 주문일 필드의 원래 값을 바꾸는 갱신 명령과는 다릅니다.

폼의 계산 텍스트 상자 컨트롤 원본에 =DateDiff("d", [주문일], [발송일])을 쓰면 두 날짜의 간격 수를 보여줍니다. 앞의 =는 계산식이고, 대괄호는 필드나 컨트롤 이름을 나타냅니다.

날짜 함수가 맞아도 식을 넣는 위치를 착각하면 원하는 결과가 나오지 않습니다. 폼의 전체 데이터 원본과 텍스트 상자의 컨트롤 원본이 헷갈리면 원본 속성 가이드로 이어서 확인하세요. 날짜가 비어 있는 자료는 무조건 0으로 바꾸지 말고 Null 처리 가이드에서 먼저 의미를 구분하세요.

문제 풀이 순서: 결과, 단위, 방향, 예외

첫째, 답이 오늘 날짜인지 이동한 날짜인지 간격 수인지 표시합니다. 이 단계에서 Date·DateAdd·DateDiff 중 하나를 고릅니다. '날짜 관련'이라는 넓은 단서만으로 고르지 마세요.

둘째, 연·월·일·분 중 단위를 확인하고 DateAdd의 number 또는 DateDiff의 날짜 순서를 점검합니다. 셋째, 월말이라면 존재하지 않는 날짜가 보정되는지, yyyy라면 완료된 기간이나 나이와 혼동했는지 확인합니다.

마지막에는 식 전체를 한 문장으로 바꾸어 읽습니다. '오늘에서 30분 뒤'는 DateAdd("n", 30, Now()), '주문일에서 발송일까지 며칠'은 DateDiff("d", [주문일], [발송일])입니다. 이름만 재암기하기보다 지문을 올바른 인수로 바꾸는 연습을 하세요.

셀프 체크 7문제: 결과와 이유를 함께 말하세요

1. 현재 날짜와 시각을 함께 남기는 함수는? 정답은 Now()입니다. Date()는 날짜만 반환합니다.

2. DateAdd("d", 3, DateSerial(2026, 9, 28))의 결과는? 정답은 2026-10-01입니다. 일 단위로 3일 이동합니다.

3. DateAdd("m", 1, DateSerial(2026, 1, 31))의 결과는? 정답은 2026-02-28입니다. 2월에 없는 31일을 유효한 날짜로 보정합니다.

4. DateDiff("d", DateSerial(2026, 10, 1), DateSerial(2026, 9, 28))의 결과는? 정답은 -3입니다. date1이 더 늦으므로 음수입니다.

5. 30분 뒤를 구할 때 "m"과 "n" 중 어느 단위인가요? 정답은 "n"입니다. "m"은 월 단위입니다.

6. DateDiff("yyyy", DateSerial(2026, 12, 31), DateSerial(2027, 1, 1))은 0인가요, 1인가요? 정답은 1입니다. 완료된 1년이 아니라 연도 차이를 계산합니다.

7. DateAdd의 "w"는 주말을 자동으로 제외하나요? 정답은 아니오입니다. 모든 요일을 포함해 지정한 일수를 더합니다.

시험 직전 다섯 줄 요약

1. 오늘·더해·차이: Date는 오늘, DateAdd는 새 날짜, DateDiff는 간격 수입니다.

2. DateAdd는 단위·더할 수·기준 날짜, DateDiff는 단위·첫 날짜·둘째 날짜입니다.

3. "m"은 월, "n"은 분입니다. 간격 인수는 문자열로 씁니다.

4. 월말에 한 달 더하면 유효한 날짜로 보정되고, 앞 날짜가 더 늦은 DateDiff는 음수입니다.

5. Now는 시간을 포함하고, DateDiff의 yyyy를 곧바로 정확한 만 나이로 읽지 않습니다.

공식 근거와 다음 학습

Microsoft Learn의 Date·DateAdd·DateDiff·Now·DateSerial 문서와 Microsoft Support의 Access DateDiff 계산식 안내를 대조했습니다. 고정 날짜 예제와 문제는 문서의 규칙을 바탕으로 직접 구성했으며 실제 Access 프로그램 실행 검증은 하지 않았습니다.

정답을 설명할 수 있으면 컴활 1급 공부하기로 이동해 관련 개념을 다시 회상하세요. 함수가 아니라 개체나 식의 위치에서 틀린 문제는 데이터베이스 개체·원본 속성 가이드, 날짜 누락은 Null 처리 가이드, 전체 풀이 순서는 프로시저 가이드로 나눠 복습하는 편이 좋습니다.

FAQ

자주 묻는 질문

컴활 1급 Date DateAdd DateDiff 차이는 무엇인가요?

Date는 현재 날짜, DateAdd는 기준 날짜에 지정 간격을 더하거나 뺀 새 날짜, DateDiff는 두 날짜 사이의 지정 간격 수를 반환합니다. DateAdd의 두 번째 인수는 더할 수이고 DateDiff의 두 번째 인수는 첫 날짜입니다.

DateAdd로 1월 31일에 한 달을 더하면 어떻게 되나요?

DateAdd("m", 1, DateSerial(2026, 1, 31))은 2026-02-28입니다. 이동한 월에 31일이 없으므로 유효한 날짜로 보정합니다. 한 달 이동을 30일 이동과 같다고 보면 안 됩니다.

DateDiff 결과가 음수인 이유는 무엇인가요?

첫 날짜 date1이 둘째 날짜 date2보다 늦으면 음수를 반환합니다. 주문 후 발송까지 일수를 계산할 때는 DateDiff("d", [주문일], [발송일])처럼 의미에 맞는 순서를 확인하세요.

Access 날짜 함수에서 m은 분인가요? Date와 Now는 어떻게 다른가요?

DateAdd·DateDiff의 interval에서 m은 월이고 n은 분입니다. 30분 뒤는 DateAdd("n", 30, Now())입니다. Date는 현재 날짜만, Now는 현재 날짜와 시간을 반환합니다.

무료 학습 도구

시간과 점수 감각을 바로 확인하세요

모의고사 전에는 시간 배분을, 채점 후에는 예상 점수를 확인하세요.