checkdate în PHP

Verifică dacă o dată există în calendar, de exemplu că 29 februarie apare doar în anii bisecți.

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

Ce face checkdate

checkdate spune dacă o combinație lună-zi-an este o dată reală. Ține cont de numărul de zile din fiecare lună și de anii bisecți. Anul trebuie să fie între 1 și 32767.

Este potrivită pentru validarea datelor introduse în formulare, înainte să le salvezi. Spre deosebire de mktime, nu „repară” datele greșite.

Parametri

Parametru Descriere
$month Luna, de la 1 la 12.
$day Ziua lunii.
$year Anul, de la 1 la 32767.

Ce returnează

true dacă data există, altfel false.

Exemple

Exemplul 1: Date valide și invalide

<?php
var_dump(checkdate(2, 29, 2024));
var_dump(checkdate(2, 29, 2026));
var_dump(checkdate(4, 31, 2026));
var_dump(checkdate(13, 1, 2026));

Rezultat

bool(true)
bool(false)
bool(false)
bool(false)

Exemplul 2: Validarea unei date din formular

Data vine ca text în format românesc. O împarți în bucăți, le transformi în numere și le verifici.

<?php
foreach (["15.08.2026", "31.04.2026", "abc"] as $text) {
    $parti = array_map("intval", explode(".", $text)) + [0, 0, 0];
    [$zi, $luna, $an] = $parti;

    echo $text . ": " . (checkdate($luna, $zi, $an) ? "dată corectă" : "dată greșită") . "\n";
}

Rezultat

15.08.2026: dată corectă
31.04.2026: dată greșită
abc: dată greșită

Exemplul 3: Este an bisect?

<?php
function esteBisect(int $an): bool
{
    return checkdate(2, 29, $an);
}

foreach ([2024, 2026, 2000, 2100] as $an) {
    echo $an . ": " . (esteBisect($an) ? "bisect" : "nebisect") . "\n";
}

Rezultat

2024: bisect
2026: nebisect
2000: bisect
2100: nebisect

Greșeli frecvente

  • Dai parametrii în ordinea românească zi, lună, an. Ordinea corectă este lună, zi, an.
  • Trimiți direct un text nenumeric, de exemplu checkdate("aa", 1, 2026). În PHP 8 primești TypeError. Transformă întâi valorile în numere cu (int) sau intval.

Comenzi înrudite

  • mktime: Construiește timestamp-ul Unix pentru o dată și o oră anume, din ore, minute, secunde, lună, zi și an.
  • date_create / DateTime: Creează un obiect DateTime dintr-un text. Obiectele DateTime și DateTimeImmutable sunt modul modern de a lucra cu date în PHP.
  • strtotime: Transformă o dată scrisă ca text (inclusiv expresii ca „+1 week”) în timestamp.