Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как проверить, что дата правильная

Короткий ответ

Разберите строку по формату и убедитесь, что обратно получается та же строка:

<?php
 
function isValidDate(string $value, string $format = 'd.m.Y'): bool
{
    $date = DateTimeImmutable::createFromFormat($format, $value);
 
    return $date !== false && $date->format($format) === $value;
}
 
var_dump(isValidDate('30.01.2025'));
var_dump(isValidDate('31.02.2025'));
var_dump(isValidDate('tomorrow'));

Результат:

bool(true)
bool(false)
bool(false)

Зачем сверять результат

PHP сам «исправляет» несуществующие даты: 31 февраля превращается в начало марта, и ошибки нет:

<?php
 
echo DateTimeImmutable::createFromFormat('d.m.Y', '31.02.2025')->format('d.m.Y');

Результат:

03.03.2025

Отдельные числа

Если день, месяц и год пришли по отдельности, хватит checkdate():

<?php
 
var_dump(checkdate(2, 31, 2025));

Результат:

bool(false)

Функции из этого ответа

  • checkdate — Проверяет, существует ли такая дата.
  • DateTimeImmutable — Объект даты и времени, который нельзя изменить: каждое действие возвращает новый объект.
  • strtotime — Превращает текстовое описание даты в метку времени.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.