Checkdate: примеры (PHP)

Использование checkdate для валидации дат в PHP
Раздел: Дата и время
checkdate(int $month, int $day, int $year): bool

Функция checkdate в PHP

Функция checkdate() применяется для проверки корректности даты по григорианскому календарю. Эта функция часто используется при валидации пользовательского ввода, обработке данных форм и проверке значений перед созданием объектов DateTime.

Аргументы функции

Функция принимает три целочисленных параметра:

  1. Месяц (int) - число от 1 до 12
  2. День (int) - число в зависимости от месяца и года
  3. Год (int) - число от 1 до 32767

Возвращаемое значение: true если дата существует, false если дата некорректна.

Примеры использования checkdate

Проверка корректной даты
<?php
var_dump(checkdate(12, 31, 2023));
?>
bool(true)
Проверка некорректного дня
<?php
var_dump(checkdate(2, 30, 2023));
?>
bool(false)
Проверка високосного года
<?php
var_dump(checkdate(2, 29, 2024));
var_dump(checkdate(2, 29, 2023));
?>
bool(true)
bool(false)

Альтернативные функции в PHP

DateTime::createFromFormat

Создает объект DateTime из строки с указанным форматом. Предпочтительнее при работе со строковыми представлениями дат.

mktime и strtotime

Функции для создания временных меток. Возвращают false при некорректных датах, но менее строгие в валидации.

filter_var с FILTER_VALIDATE_REGEXP

Позволяет выполнить проверку даты через регулярное выражение. Используется для сложных форматов валидации.

Аналоги в других языках

Checkdate в Python

from datetime import datetime
try:
    datetime(2023, 12, 31)
    print("Дата корректна")
except ValueError:
    print("Дата некорректна")
Дата корректна

Checkdate в Javascript

function checkDate(year, month, day) {
    const date = new Date(year, month - 1, day);
    return date.getFullYear() === year && 
           date.getMonth() === month - 1 && 
           date.getDate() === day;
}
console.log(checkDate(2023, 2, 30));
false

Checkdate в MySQL

SELECT STR_TO_DATE('2023-02-30', '%Y-%m-%d') IS NOT NULL;
NULL

Типичные ошибки

Неправильный порядок аргументов
<?php
// Ожидается месяц, день, год
$result = checkdate(31, 12, 2023);
var_dump($result);
?>
bool(false)
Строковые аргументы вместо числовых
<?php
$result = checkdate('12', '31', '2023');
var_dump($result);
?>
bool(false)
Неучет граничных значений года
<?php
var_dump(checkdate(1, 1, 0));
var_dump(checkdate(1, 1, 32768));
?>
bool(false)
bool(false)

Изменения в новых версиях PHP

Функция checkdate() остается стабильной и неизменной на протяжении многих версий PHP. В PHP 8.0 усилилась строгость типизации, но функция продолжает принимать целочисленные аргументы. Автоматическое преобразование типов стало менее агрессивным, что повышает надежность проверок.

Расширенные примеры применения

Валидация даты из пользовательского ввода
Пример php
<?php
function validateUserDate($month, $day, $year) {
    if (!checkdate($month, $day, $year)) {
        return "Указана некорректная дата";
    }
    if ($year < 1900 || $year > 2100) {
        return "Год должен быть между 1900 и 2100";
    }
    return "Дата корректна";
}
echo validateUserDate(2, 29, 2024);
?>
Дата корректна
Проверка диапазона дат для бизнес-логики
Пример php
<?php
function isBusinessDay($month, $day, $year) {
    if (!checkdate($month, $day, $year)) {
        return false;
    }
    $timestamp = mktime(0, 0, 0, $month, $day, $year);
    $dayOfWeek = date('N', $timestamp);
    return ($dayOfWeek >= 1 && $dayOfWeek <= 5);
}
var_dump(isBusinessDay(12, 31, 2023));
?>
bool(false)
Генерация корректных дат для календаря
Пример php
<?php
function getMonthDays($month, $year) {
    $days = [];
    for ($day = 1; $day <= 31; $day++) {
        if (checkdate($month, $day, $year)) {
            $days[] = $day;
        }
    }
    return $days;
}
print_r(getMonthDays(2, 2023));
?>
Array
(
    [0] => 1
    [1] => 2
    ...
    [27] => 28
)

PHP checkdate function comments

En
Checkdate Validate a Gregorian date