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știTypeError. Transformă întâi valorile în numere cu(int)sauintval.
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.