Checkdate: примеры (PHP)
checkdate(int $month, int $day, int $year): boolФункция checkdate в PHP
Функция checkdate() применяется для проверки корректности даты по григорианскому календарю. Эта функция часто используется при валидации пользовательского ввода, обработке данных форм и проверке значений перед созданием объектов DateTime.
Функция принимает три целочисленных параметра:
- Месяц (int) - число от 1 до 12
- День (int) - число в зависимости от месяца и года
- Год (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 из строки с указанным форматом. Предпочтительнее при работе со строковыми представлениями дат.
Функции для создания временных меток. Возвращают false при некорректных датах, но менее строгие в валидации.
Позволяет выполнить проверку даты через регулярное выражение. Используется для сложных форматов валидации.
Аналоги в других языках
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
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
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
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
)