Проверьте правильность отметки даты и времени в PHP? - PullRequest
3 голосов
/ 12 ноября 2011

Есть ли способ проверить правильность отметки даты в PHP?

В настоящее время я использую yyyy-mm-dd hh:mm:ss в MySQL и хотел бы убедиться, что пользователь предоставляет отметку даты / времени в форме, соответствующей правильному формату.

Ответы [ 4 ]

6 голосов
/ 09 декабря 2012

[пока кто-то не придет с хорошим (bugfree), работающим примером checkdate ()] Я использую эту функцию:

<?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

1 голос
/ 07 марта 2014

Это дублирующий вопрос. Дополнительные сведения и ответы см. MySQL: как проверить, является ли строка действительной датой, временем или датой

1 голос
/ 12 ноября 2011

Вы можете использовать функцию checkdate() для проверки действительности даты.

http://php.net/manual/en/function.checkdate.php

Вы также можете передать все части своей временной метки в mktime(), и если возвращается false или -1 (в зависимости от версии PHP), то это недопустимая дата

http://www.php.net/manual/en/function.mktime.php

0 голосов
/ 12 ноября 2011

Попробуйте проанализировать данную строку, а затем убедитесь, что это та же дата, которую вы ввели, обратите внимание на следующее:

$dt = DateTime::createFromFormat('Y-m-d H:i:s', '2011-01-32 12:00:00');
echo $dt->format('Y-m-d H:i:s');
// outputs 2011-02-01 12:00:00

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...