Есть ли способ проверить, правильно ли установлена метка даты в PHP?
В настоящее время я использую yyyy-mm-dd hh:mm:ss
в MySQL и хотел бы обеспечить, когда пользователь предоставит отметку даты / времени в форме, которая соответствует правильному формату.
[пока кто-то не приходит с хорошим (bugfree), work checkdate () example] Я использую эту функцию:
<?php function validateMysqlDate( $date ){ if (preg_match("/^(\d{4})-(\d{2})-(\d{2}) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $date, $matches)) { if (checkdate($matches[2], $matches[3], $matches[1])) { return true; } } return false; } // check it: $a = validateMysqlDate('2012-12-09 09:04:00'); $b = validateMysqlDate('20122-12-09 09:04:00'); $c = validateMysqlDate('2012-12_09 09:04:00'); $d = validateMysqlDate(''); var_dump( $a ); var_dump( $b ); var_dump( $c ); var_dump( $d ); ?>
и btw: checkdate () вернет true для $ b, хотя это не действительное mysql datetime
Вы можете использовать функцию checkdate()
для проверки действительности даты.
http://php.net/manual/en/function.checkdate.php
Вы также можете передать все части своей метки времени в mktime()
и если возвращается false или -1 (в зависимости от версии PHP), это недействительная дата
Это дублирующий вопрос. Для дополнительной дискуссии и ответов см. MySQL: как проверить, является ли строка действительной DATE, TIME или DATETIME
Попробуйте разобрать данную строку, а затем проверить, что она указана в тот же день, который вы ввели, обратите внимание на следующее:
$dt = DateTime::createFromFormat('Ymd H:i:s', '2011-01-32 12:00:00'); echo $dt->format('Ymd H:i:s'); // outputs 2011-02-01 12:00:00
НТН.