Se eu tiver uma string PHP no formato de mm-dd-YYYYY
(por exemplo, 10-16-2003), como faço para convertê-la corretamente para um Date' e depois para um
DateTime' no formato de YYYY-mm-dd
? A única razão pela qual eu peço tanto o DateTime' como o
DateTime' é porque preciso de um num ponto, e o outro num ponto diferente.
Utilize strtotime()
na sua primeira data e depois date('Y-m-d')
para convertê-lo de volta:
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
Note que há uma diferença entre utilizar a barra de avanço /
e o hífen -
na função strtotime()
. Para citar a partir de php.net:
Datas nos formatos m/d/y ou d-m-y são desambiguados ao olhar para o separador entre os vários componentes: se o separador for um slash (/), então o americano m/d/y é assumido; enquanto que se o separador for um traço (-) ou um ponto (.), depois o o formato europeu d-m-y é assumido.
Você precisa ter cuidado com os formatos m/d/Y e m-d-Y. PHP considera /
para significar m/d/Y e -
para significar d-m-Y. Neste caso, eu descreveria explicitamente o formato de entrada:
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
Assim, não estás aos caprichos de uma certa interpretação.
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
Edit: você também pode passar um construtor DateTimeZone para DateTime() para garantir a criação da data para o fuso horário desejado, não o padrão do servidor.