Очень часто при работе с датами требуется соблюдать их формат. Это может пригодиться в БД, где даты обычно сохраняются в строгом формате Y-m-d или при передачи команды через API какого-нибудь сервиса.
Самым понятным для человека считается формат даты: дд.мм.гггг - date("d.m.Y"). Давайте сделаем форму, в которой пользователь вводит в свободном порядке дату своего рождения, а с помощью php скрипта мы проверим, насколько правильно он это сделал:
<form method="post">
<input type="text" name="dates" placeholder="Дата в форате: дд.мм.гггг">
<input type="submit" name="subbut" value="Отправить">
</form>
Теперь создадим событие, которое будет получать данные из формы (поле dates) и проверять его:
<?php
if (isset($_POST["subbut"])) {
//сначала убираем посторонние символы
$test_data = preg_replace('/[^0-9\.]/u', '', trim($_POST['dates']));
//разбиваем дату в массив
$test_data_ar = explode('.', $test_data);
//если дата введена в корректном формате d.m.Y (checkdate(месяц, день, год))
if(@checkdate($test_data_ar[1], $test_data_ar[0], $test_data_ar[2])) {
echo '<br>Дата введена <i>корректно</i> '.$test_data;
}
else echo '<br>Дата введена не корректно!';
}
?>
Из подробных комментариев к коду, я думаю вы поняли принцип проверки даты. Но все равно объясню некоторые моменты.
- preg_replace() - позволяет пропускать через input только цифры и точку - именно из этих символов и будет состоять наша дата. Если такая проверка вам не нужна, просто замените строку на эту: $test_data = $_POST['dates'];
- Далее формируем массив, где в $test_data_ar[0] - день, $test_data_ar[1] - месяц, $test_data_ar[2] - год.
- На последнем шаге делаем проверку с помощью функции (checkdate(месяц, день, год), в которую и подставляем наши данные.
Посмотрите примеры тестов дат на корректность:
20.10.2003 => корректно
20.10.2003 => корректно
20.12.2204 => корректно
20.12.2 0 04 => корректно (20.12.2004)
20.15.2004 => не корректно (не существует 15 месяца)
202.12.2004 => не корректно (не бывает 202 дня в месяце)
Вот такой у меня получился код проверки даты. Его легко можно добавить в функцию и проверять данные пользователя. Бонусом, покажу пример, с помощью которого можно менять формат даты. Предположим, мы получили дату в формате дд.мм.гггг, но в БД нам нужно сохранить ее в таком виде: гггг-мм-дд. Для этого используем такое преобразование: $dates = date("Y-m-d", strtotime($_POST["dates"]));