Hvis jeg har en PHP-streng i formatet mm-dd-YYYY
(for eksempel 10-16-2003), hvordan konverterer jeg den til en Date
og deretter en DateTime
i formatet YYYY-mm-dd
? Den eneste grunnen til at jeg ber om både Date
og DateTime
er fordi jeg trenger den ene på ett sted, og den andre på et annet sted.
Bruk strtotime()
på den første datoen og deretter date('Y-m-d')
for å konvertere den tilbake:
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
Vær oppmerksom på at det er forskjell på å bruke skråstrek /
og bindestrek -
i funksjonen strtotime()
. For å sitere fra php.net:
Datoer i formatene m/d/y eller d-m-y skilles fra hverandre ved å se på skilletegnene skilletegn mellom de ulike komponentene: hvis skilletegnet er en skråstrek (/), antas det amerikanske m/d/y-formatet antatt; mens hvis skilletegnet er en bindestrek (-) eller en prikk (.), da er det antas det europeiske d-m-y-formatet.
Du må være forsiktig med formatene m/d/Y og m-d-Y. PHP anser /
for å bety m/d/Y og -
for å bety d-m-Y. Jeg vil eksplisitt beskrive inndataformatet i dette tilfellet:
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
På den måten er du ikke avhengig av en bestemt tolkning.
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
Rediger: Du kan også sende en DateTimeZone til DateTime()-konstruktøren for å sikre at datoen opprettes for ønsket tidssone, ikke serverens standardtidssone.