Converter um formato de data em outro em PHP

Existe uma maneira simples de converter um formato de data em outro formato de data em PHP?

Eu tenho isto:

$old_date = date('y-m-d-h-i-s');            // works

$middle = strtotime($old_date);             // returns bool(false)

$new_date = date('Y-m-d H:i:s', $middle);   // returns 1970-01-01 00:00:00

Mas I'd claro que gostava de devolver uma data actual em vez do crack 'o amanhecer. O que eu estou fazendo de errado?

Solução

O segundo parâmetro para date() precisa ser um carimbo de tempo apropriado (segundos desde 1 de janeiro de 1970). Você está passando uma string, cuja data() pode't reconhecer.

Você pode usar strtotime() para converter uma string de data em um carimbo de data/hora. Entretanto, mesmo strtotime() não reconhece o formato y-m-d-h-i-s.

**PHP 5.3 e acima***

Utilize DateTime::createFromFormat. Ele permite que você especifique uma máscara exata - utilizando a sintaxe date() - para analisar as datas de entrada de strings com.

**PHP 5.2 e inferior***

Você terá que analisar os elementos (ano, mês, dia, dia, hora, minuto, segundo) manualmente utilizando substr() e entregar os resultados para mktime() que irá construir um carimbo de data/hora.

Mas isso'é muito trabalho! Eu recomendo usar um formato diferente que strftime() possa entender. strftime() entende qualquer entrada de data que não seja a próxima vez que joe escorregar no gelo. por exemplo, isto funciona:

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   
Comentários (4)

Experimenta isto:

$old_date = date('y-m-d-h-i-s');
$new_date = date('Y-m-d H:i:s', strtotime($old_date));
Comentários (3)

Você precisa converter o $old_date de volta em um timestamp, pois a função de data requer um timestamp como seu segundo argumento.

Comentários (0)