W3docs

checkdate()

Apprenez comment PHP checkdate() valide un mois, un jour et une année comme date grégorienne. Syntaxe, paramètres, années bissextiles et exemples.

Introduction

La fonction checkdate() vérifie si un mois, un jour et une année forment ensemble une date valide dans le calendrier grégorien. C'est la manière la plus simple en PHP de répondre à une question comme « Le 29 février est-il une date réelle cette année ? » sans analyser des chaînes de caractères ni construire un objet DateTime.

Cette page couvre la syntaxe, les paramètres et la valeur de retour de checkdate(), la façon dont elle gère les années bissextiles et les valeurs hors limites, sa limite d'intervalle pour les années, et quand utiliser la classe DateTime à la place.

Syntaxe

checkdate(int $month, int $day, int $year): bool

Paramètres

ParamètreDescription
$monthLe mois, sous forme d'entier. Plage valide : 1–12.
$dayLe jour du mois. La plage valide dépend du mois et de l'année — par exemple, 30 est valide pour avril mais pas pour février.
$yearL'année, sous forme d'entier. Plage valide : 1–32767.

Valeur de retour

checkdate() retourne true si la date est valide et false dans le cas contraire. La date est considérée comme valide lorsque toutes ces conditions sont remplies : le mois est compris entre 1 et 12, l'année est comprise entre 1 et 32767, et le jour est dans le nombre de jours que le mois donné possède pour l'année donnée (les années bissextiles sont prises en compte).

Exemple de base

Pour vérifier si le 29 février 2024 est une date valide (2024 est une année bissextile, donc oui) :

php— editable, runs on the server

Le script stocke le mois, le jour et l'année dans des variables, les passe à checkdate() et affiche un message basé sur le boolean qu'elle retourne.

Années bissextiles et jours invalides

La vraie valeur de checkdate() est qu'elle connaît le nombre de jours de chaque mois — y compris la règle des années bissextiles pour février. Le même numéro de jour peut être valide une année et invalide l'année suivante :

<?php

var_dump(checkdate(2, 29, 2024)); // bool(true)  — 2024 is a leap year
var_dump(checkdate(2, 29, 2023)); // bool(false) — 2023 is not
var_dump(checkdate(4, 31, 2024)); // bool(false) — April has only 30 days
var_dump(checkdate(13, 1, 2024)); // bool(false) — month out of range
var_dump(checkdate(0, 1, 2024));  // bool(false) — month must be >= 1

Puisque checkdate() effectue ces vérifications elle-même, vous n'avez pas à coder en dur quels mois ont 30 ou 31 jours.

Un cas pratique : valider les données d'un formulaire

Un usage courant de checkdate() est de rejeter les dates impossibles soumises via un formulaire avant de les stocker ou de construire un objet DateTime :

<?php

function validateDate(int $month, int $day, int $year): string
{
    if (!checkdate($month, $day, $year)) {
        return "Please enter a real calendar date.";
    }

    return "Saved $year-$month-$day.";
}

echo validateDate(2, 30, 2024) . "\n"; // Please enter a real calendar date.
echo validateDate(12, 25, 2024) . "\n"; // Saved 2024-12-25.

La limite d'intervalle des années et l'alternative DateTime

checkdate() n'accepte que les années dans la plage 1–32767, ce qui convient à la plupart des applications mais ne convient pas si vous avez besoin de dates en dehors de cet intervalle. Elle prend également trois entiers séparés, ce qui vous oblige à découper vous-même une chaîne de date au préalable.

Pour les entrées sous forme de chaîne ou une validation plus stricte, utilisez la classe DateTime de PHP. DateTime::createFromFormat() analyse une date selon un format personnalisé, et en la combinant avec DateTime::getLastErrors(), vous pouvez détecter les valeurs que PHP « reporte » silencieusement (comme transformer le 30 février en 1er ou 2 mars) :

<?php

$input = '2024-02-30';
$date = DateTime::createFromFormat('Y-m-d', $input);
$errors = DateTime::getLastErrors();

if ($date === false || $errors['warning_count'] > 0 || $errors['error_count'] > 0) {
    echo "Invalid date: $input";
} else {
    echo "Valid date: " . $date->format('Y-m-d');
}
// Output: Invalid date: 2024-02-30

Si vous disposez uniquement du mois, du jour et de l'année sous forme d'entiers, checkdate() est le choix le plus court et sans dépendances.

Fonctions associées

  • mktime() — construire un horodatage Unix à partir de composantes de date individuelles.
  • date() — formater un horodatage en une chaîne de date lisible.
  • strtotime() — analyser une date textuelle en anglais en un horodatage.
  • PHP Date and Time — vue d'ensemble du travail avec les dates en PHP.

Conclusion

checkdate() est le moyen le plus rapide de confirmer qu'un mois, un jour et une année forment une vraie date grégorienne, avec la gestion des années bissextiles intégrée. Gardez à l'esprit sa limite d'années 1–32767 et passez à DateTime::createFromFormat() lorsque vous avez besoin de valider des chaînes de date ou de travailler en dehors de cet intervalle.

Pratique

Pratique
Que peut-on valider avec la fonction PHP checkdate() ?
Que peut-on valider avec la fonction PHP checkdate() ?
Was this page helpful?