Konverzia reťazca na Date a DateTime

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.

Riešenie

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.

Komentáre (8)

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.

Komentáre (4)
$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.

Komentáre (2)