Ce face date_create / DateTime
date_create("2026-10-19") este forma de funcție pentru new DateTime("2026-10-19"). Obiectul obținut știe să se formateze (->format()), să se modifice (->modify("+1 week")) și să se compare cu alte date folosind <, > și ==.
Există două clase. DateTime se modifică pe loc: după ->modify(), obiectul original are altă valoare. DateTimeImmutable (creat cu date_create_immutable sau new DateTimeImmutable) nu se schimbă niciodată: fiecare modificare returnează un obiect nou. Varianta imutabilă evită multe greșeli și este recomandată în codul nou.
Când textul nu poate fi înțeles, date_create returnează false, iar new DateTime aruncă o excepție (DateMalformedStringException din PHP 8.3). Pentru formate fixe, de exemplu data românească 25.12.2026, folosește date_create_from_format sau DateTime::createFromFormat.
Parametri
| Parametru | Descriere |
|---|---|
$datetime |
Opțional. Data ca text: "2026-10-19 14:30", "now", "tomorrow", "+3 days". Implicit, momentul curent. |
$timezone |
Opțional. Un obiect DateTimeZone, de exemplu new DateTimeZone("Europe/Bucharest"). Implicit, fusul orar setat în script. |
Ce returnează
Un obiect DateTime, sau false dacă textul nu este o dată validă.
Exemple
Exemplul 1: Creare, formatare și comparare
Literele de format sunt aceleași ca la date. Numele zilelor (l) și ale lunilor (F) sunt în engleză.
<?php
date_default_timezone_set("Europe/Bucharest");
$comanda = date_create("2026-10-19 14:30");
$livrare = date_create("2026-10-23");
echo $comanda->format("d.m.Y H:i") . "\n";
echo $livrare->format("l, d F Y") . "\n";
var_dump($comanda < $livrare);
Rezultat
19.10.2026 14:30
Friday, 23 October 2026
bool(true)
Exemplul 2: DateTime se modifică, DateTimeImmutable nu
Cu DateTime, variabila $start a fost schimbată de modify. Cu DateTimeImmutable, rezultatul este un obiect nou, iar originalul rămâne neatins.
<?php
$start = date_create("2026-10-19");
$final = $start->modify("+1 month");
echo $start->format("d.m.Y") . " / " . $final->format("d.m.Y") . "\n";
$start = date_create_immutable("2026-10-19");
$final = $start->modify("+1 month");
echo $start->format("d.m.Y") . " / " . $final->format("d.m.Y");
Rezultat
19.11.2026 / 19.11.2026
19.10.2026 / 19.11.2026
Exemplul 3: Dată în format românesc și text invalid
Semnul ! de la începutul formatului pune ora la 00:00:00. Fără el, ora este luată de la momentul curent.
<?php
$craciun = date_create_from_format("!d.m.Y", "25.12.2026");
echo $craciun->format("Y-m-d H:i:s") . "\n";
var_dump(date_create("ceva greșit"));
try {
new DateTime("ceva greșit");
} catch (Exception $e) {
echo get_class($e);
}
Rezultat
2026-12-25 00:00:00
bool(false)
DateMalformedStringException
Greșeli frecvente
- Folosești
DateTimeși modifici aceeași dată în mai multe locuri. Fiecaremodifyschimbă obiectul original. FoloseșteDateTimeImmutable. - Aduni o lună la 31 ianuarie și te aștepți la 28 februarie. PHP calculează 31 februarie, adică 3 martie. Pentru „ultima zi a lunii următoare” folosește
modify("last day of next month"). - Nu verifici rezultatul lui
date_create. Pentru un text greșit primeștifalse, iar apelul->format()pefalseoprește scriptul cu eroare.
Comenzi înrudite
date_diff / DateInterval: Calculează diferența dintre două date: ani, luni, zile, ore. Rezultatul este un obiect DateInterval.date: Afișează data și ora într-un anumit format.strtotime: Transformă o dată scrisă ca text (inclusiv expresii ca „+1 week”) în timestamp.date_default_timezone_set: Setează fusul orar folosit de toate funcțiile de dată din script, de exemplu Europe/Bucharest.