정의 및 사용 방법
- PHP 버전
- 4+
checkdate() 함수는 주어진 월, 일, 연도 조합이 달력상 유효한 날짜인지 체크합니다.
그레고리력 기준에 맞는 유효한 날짜이면 true, 아니면 false를 반환합니다.
- 그레고리력
- 그레고리력(Gregorian Calendar)은 현재 전 세계적으로 사용되는 국제 표준 달력입니다.
한마디로 우리가 지금 쓰고 있는 바로 그 달력이 그레고리력입니다.
특징
- 이 함수는 사용자가 입력하거나 시스템에 존재하는 날짜가 실제 달력상 유효한지 검증할 때 유용합니다.
- 특히 윤년(예: 2월 29일)이나 월별 일수 초과(예: 4월 35일)처럼 입력된 날짜의 논리적 오류를 확인할 때 자주 사용됩니다.
- 예약 시스템이나 이벤트 스케줄링 등에서 날짜가 유효한지 1차적으로 검증하는 용도로 활용할 수 있습니다.
기본 예제
/**
* 간단 구문 설명
*
* checkdate($month, $day, $year): bool
* @param int $month (필수) : 검사할 월 (1~12)
* @param int $day (필수) : 검사할 일 (1~월별 최대일수)
* @param int $year (필수) : 검사할 연도 (1~32767)
*/
/* checkdate() 함수 활용 예제: 윤년 및 월별 일수 검증 */
var_dump(checkdate(2, 29, 2024)); // bool(true) → 2024년은 윤년, 2월 29일 유효
var_dump(checkdate(2, 29, 2023)); // bool(false) → 2023년은 윤년 아님, 2월 29일 존재 X
var_dump(checkdate(4, 31, 2023)); // bool(false) → 4월은 30일까지, 31일은 존재 X
주의하세요!
매개변수의 순서가 월, 일, 연도 순으로 되어 있어 일반적인 연도, 월, 일 순서가 아니라는 점에 주의해야 합니다.
구문
checkdate(int $month, int $day, int $year): bool
매개변수
$month |
필수. 검사할 '월'을 정수(int)로 지정합니다.
|
|---|---|
$day |
필수. 검사할 '일'을 정수(int)로 지정합니다.
|
$year |
필수. 검사할 '연도'를 정수(int)로 지정합니다.
|
반환 값
주어진 날짜가 유효하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
단, $year로 전달되는 값이 유효한 범위(1에서 32767까지의 값)를 벗어나면 false를 반환합니다.
주의할 점
checkdate() 함수를 실제로 사용할 때는 몇 가지 주의할 점이 있습니다. 아래 항목을 참고하면 오류나 혼동을 예방할 수 있습니다.
연도(Year)의 제한 범위
그레고리력 기준으로 1에서 32767 사이의 정수만 유효합니다.
이 범위의 값을 벗어나면 연도는 유효하지 않은 것으로 간주되어 false를 반환합니다.
매개변수 타입은 정수(int)
함수 정의상 인자는 정수(int) 타입입니다. 문자열(String)로 숫자를 전달해도 PHP가 자동으로 타입 변환을 시도하지만, 데이터의 안정성을 위해 정수(int)로 지정하세요. (PHP 변수의 데이터 타입 변환을 참조하세요.)
그리고, '2025-12-31'이나 '2025/12/31'같은 형식의 문자열 전체를 바로 넣을 수 없으므로, 반드시 explode() 등으로 분리하여 각각 전달해야 합니다.
결과값 해석
날짜가 유효하지 않을 때 단순히 false만 반환할 뿐, 월(month)이 틀린 건지 일(day)이 틀린 건지 구체적인 원인은 알려주지 않습니다.
활용 예제
checkdate() 함수는 사용자가 입력하거나 시스템에 존재하는 날짜가 실제 달력상 유효한지 검증할 때 유용합니다. 특히, 예약 시스템이나 이벤트 스케줄링 등에서 날짜가 유효한지 1차적으로 검증하는 용도로 활용할 수 있습니다.
유효한 생년월일 검증
예약 시스템, 이벤트 스케쥴링 등에서는 회원가입 등을 통해 사용자의 생년월일을 입력받는 경우가 많습니다. 이때, 입력받은 생년월일이 실제로 존재하는 날짜인지에 대한 1차적 검증 용도로 사용될 수 있습니다.
if (checkdate($_POST['month'], $_POST['day'], $_POST['year'])) {
echo '유효한 생년월일입니다.';
}
문자열 형태의 날짜 검증
사용자로부터 'YYYY-MM-DD' 형태로 입력된 문자열 날짜가 실제 달력상 존재하는지 검증할 수 있습니다.
문자열을 연, 월, 일로 분해하고 checkdate() 함수로 검사하면 간단하게 확인 가능합니다.
부연설명
사용자가 브라우저에 출력되는 네이티브 달력 날짜 선택 위젯(HTML의 <input type="date">)은 선택된 날짜를 'YYYY-MM-DD' 형태의 문자열로 반환합니다.
부연설명
'YYYY-MM-DD' 형태의 날짜 표시 문자열은 국제 표준화 기구(ISO)에서 정한 날짜 및 시간 표기법인 ISO 8601의 표준 형식으로, 가장 많이 사용되는 문자열 날짜 형식 중 하나입니다.
function isValidDate($dateStr) {
// '-' 구분자로 연, 월, 일을 분리
$parts = explode('-', $dateStr);
// 연, 월, 일이 모두 있는지 확인
if (count($parts) === 3) {
// checkdate(month, day, year) 순서 주의
return checkdate($parts[1], $parts[2], $parts[0]);
}
return false;
}
// 사용 예제
var_dump(isValidDate('2023-12-31')); // bool(true)
var_dump(isValidDate('2023-02-29')); // bool(false) → 2023년은 윤년 아님
코드 부연설명
explode() 함수는 문자열을 특정 구분자를 기준으로 나누어 배열로 변환합니다.
코드 부연설명
count() 함수는 주어진 배열의 모든 요소의 개수를 계산해서(count) 정수로 반환합니다.
참고문헌
같이 보기
- PHP date_default_timezone_set() 함수 – 날짜 기본 시간대 설정하기
- PHP date_default_timezone_get() 함수 – 날짜 기본 시간대 가져오기
- PHP date() 함수 – 날짜와 시간을 원하는 형식의 문자열로 만들기
- PHP date() 함수 – 날짜와 시간을 원하는 형식의 문자열로 만들기
- PHP strtotime() 함수 – 영어 기반 날짜와 시간 문자열을 유닉스 타임스탬프로 변환
- PHP time() 함수 – 현재 시점의 날짜와 시간을 유닉스 타임스탬프로 반환
- PHP mktime() 함수 – 지정한 시점의 날짜와 시간을 유닉스 타임스탬프로 반환