Ak mám reťazec PHP vo formáte mm-dd-YYYY
(napríklad 10-16-2003), ako ho mám správne previesť na Date
a potom na DateTime
vo formáte YYYY-mm-dd
? Jediný dôvod, prečo sa pýtam na Date
a DateTime
, je ten, že jedno potrebujem na jednom mieste a druhé na inom mieste.
Na prevod prvého dátumu použite strtotime()
a potom date('Y-m-d')
:
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
Všimnite si, že je rozdiel medzi použitím lomítka vpred /
a pomlčky -
vo funkcii strtotime()
. Citujem z php.net:
Dátumy vo formátoch m/d/y alebo d-m-y
sa rozlišujú podľa toho, či sa pozerajú na oddeľovač medzi rôznymi zložkami: ak je oddeľovač lomítko (/), potom je americký m/d/y sa predpokladá; zatiaľ čo ak je oddeľovačom pomlčka (-) alebo bodka (.), potom sa použije sa predpokladá európsky formát d-m-y.
Pri formátoch m/d/Y a m-d-Y musíte byť opatrní. PHP považuje /
za m/d/Y a -
za d-m-Y. V tomto prípade by som explicitne opísal formát vstupu:
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
Takto nie ste odkázaní na rozmary určitej interpretácie.
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
Edit: konštruktorovi DateTime() môžete tiež odovzdať DateTimeZone, aby ste zabezpečili vytvorenie dátumu pre požadované časové pásmo, nie pre predvolené pásmo servera.