Se ho una stringa PHP nel formato mm-dd-YYYY
(per esempio, 10-16-2003), come faccio a convertirla correttamente in una Date
e poi in una DateTime
nel formato YYYY-mm-dd
? L'unica ragione per cui chiedo sia Date
che DateTime
è perché ho bisogno di uno in un punto e l'altro in un punto diverso.
Usa strtotime()
sulla tua prima data poi date('Y-m-d')
per convertirla nuovamente:
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
Nota che c'è una differenza tra l'uso della barra in avanti /
e il trattino -
nella funzione strtotime()
. Per citare da php.net:
Le date nei formati m/d/y o d-m-y sono disambiguate guardando il separatore tra i vari componenti: se il separatore è una slash (/), allora l'americano m/d/y è assunto; mentre se il separatore è un trattino (-) o un punto (.), allora il si assume il formato europeo d-m-y.
Devi fare attenzione ai formati m/d/Y e m-d-Y. PHP considera /
come m/d/Y e -
come d-m-Y. Descriverei esplicitamente il formato di input in questo caso:
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
In questo modo non sei ai capricci di una certa interpretazione.
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
Modifica: si può anche passare un DateTimeZone al costruttore DateTime() per assicurare la creazione della data per il fuso orario desiderato, non quello di default del server.