Как в PHP проверить, существует ли конкретная календарная дата?

как в php проверить, существует ли конкретная календарная дата?

Использование встроенной функции

Проверка даты, введенной пользователем, является распространенной задачей в PHP. Логика конкретного приложения может включать разнообразные валидации, но в большинстве случаев вам потребуется вычислить, существовала ли указанная календарная дата. Такая проверка должна производиться с учетом високосных годов.

К счастью PHP имеет встроенную функцию checkdate(). Она принимает три целочисленных значения: порядковый номер месяца, дня и года. Значения должны лежать в определенных диапазонах: год — от 1 до 32767, месяц — от 1 до 12, день — от 1 до максимального количества дней в указанном месяце. Функция checkdate() возвратит логическое значение false при неуспешной проверке и true в случае существования заданной даты.

//Два простых пример использования
var_dump(checkdate(2, 28, 2018)); //bool(true)
var_dump(checkdate(2, 31, 2018)); //bool(false)

Собственная функция проверки

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

//функция проверки даты
function isDateExist($date, $format = 'Y-m-d') {
    $dateTime = DateTime::createFromFormat($format, $date);
    return $dateTime && ($dateTime->format($format) == $date);
}

//примеры использования
var_dump(isDateExist('2018-02-28'));          //bool(true)
var_dump(isDateExist('2018-02-30 '));         //bool(false)
var_dump(isDateExist('2018-02-28', 'Y-m-d')); //bool(true)
var_dump(isDateExist('31/02/2018', 'd/m/Y')); //bool(false)

Мы создали собственную функцию, которая принимает два параметра: дата в виде строки и формат её разбора. Если такой календарной даты не существовало, функция вернет false иначе true.

Последние публикации