date_create / DateTime în PHP

Dată și oră PHP 5.2+ (DateTimeImmutable: PHP 5.5+)

Creează un obiect DateTime dintr-un text. Obiectele DateTime și DateTimeImmutable sunt modul modern de a lucra cu date în PHP.

Sintaxă
date_create(string $datetime = 'now', ?DateTimeZone $timezone = null): DateTime|false

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. Fiecare modify schimbă obiectul original. Folosește DateTimeImmutable.
  • 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ști false, iar apelul ->format() pe false opreș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.