84 votes

Fonction permettant de vérifier si une chaîne de caractères est une date

J'essaie d'écrire une fonction pour déterminer si une chaîne est une date/heure en utilisant PHP. En gros, une date/heure valide ressemblerait à ceci :

 2012-06-14 01:46:28

Il est évident qu'il est totalement dynamique et que toutes les valeurs peuvent changer, mais il doit toujours se présenter sous la forme de XXXX-XX-XX XX:XX:XX Comment puis-je écrire une expression régulière qui vérifie la présence de ce motif et renvoie un résultat positif en cas de correspondance ?

143voto

Joey Points 148544

Si c'est toute la chaîne, essayez de l'analyser :

if (DateTime::createFromFormat('Y-m-d H:i:s', $myString) !== false) {
  // it's a date
}

64voto

Yogesh Mistry Points 933

La façon la plus simple de vérifier si une chaîne de caractères est une date :

if(strtotime($date_string)){
    // it's in date format
}

42voto

Bjoern Points 7655

Voici une autre approche, sans utiliser d'expressions rationnelles :

function check_your_datetime($x) {
    return (date('Y-m-d H:i:s', strtotime($x)) == $x);
}

30voto

escopecz Points 73

Au cas où vous ne connaîtriez pas le format de la date :

/**
 * Check if the value is a valid date
 *
 * @param mixed $value
 *
 * @return boolean
 */
function isDate($value) 
{
    if (!$value) {
        return false;
    }

    try {
        new \DateTime($value);
        return true;
    } catch (\Exception $e) {
        return false;
    }
}

var_dump(isDate('2017-01-06')); // true
var_dump(isDate('2017-13-06')); // false
var_dump(isDate('2017-02-06T04:20:33')); // true
var_dump(isDate('2017/02/06')); // true
var_dump(isDate('3.6. 2017')); // true
var_dump(isDate(null)); // false
var_dump(isDate(true)); // false
var_dump(isDate(false)); // false
var_dump(isDate('')); // false
var_dump(isDate(45)); // false

8voto

Gabor Points 347

Dans mon projet, cela semble fonctionner :

function isDate($value) {
    if (!$value) {
        return false;
    } else {
        $date = date_parse($value);
        if($date['error_count'] == 0 && $date['warning_count'] == 0){
            return checkdate($date['month'], $date['day'], $date['year']);
        } else {
            return false;
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X