O básico
A maneira simplista para converter um formato de data para outra é usar strtotime()
com date()
. strtotime()
converterá a data em um carimbo de data e hora do Unix . Esse carimbo de data e hora do Unix pode ser passado date()
para convertê-lo no novo formato.
$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
Ou como uma linha:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
Lembre-se de que strtotime()
exige que a data esteja em um formato válido . A falha em fornecer um formato válido resultará no strtotime()
retorno de false, o que fará com que sua data seja 1969-12-31.
Usando DateTime()
A partir do PHP 5.2, o PHP ofereceu a DateTime()
classe que nos oferece ferramentas mais poderosas para trabalhar com datas (e hora). Podemos reescrever o código acima usando DateTime()
o seguinte:
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
Trabalhando com carimbos de data e hora Unix
date()
usa um timeatamp do Unix como seu segundo parâmetro e retorna uma data formatada para você:
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime () funciona com registros de data e hora do Unix adicionando um @
antes do registro de data e hora:
$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');
Se o carimbo de data / hora existente estiver em milissegundos (pode terminar em 000
e / ou o carimbo de data / hora tem 13 caracteres), será necessário convertê-lo em segundos antes de poder convertê-lo em outro formato. Há duas maneiras de fazer isso:
- Corte os três últimos dígitos usando
substr()
O corte dos três últimos dígitos pode ser obtido de várias maneiras, mas o uso substr()
é o mais fácil:
$timestamp = substr('1234567899000', -3);
Você também pode converter o registro de data e hora em segundos, dividindo por 1000. Como o registro de data e hora é muito grande para sistemas de 32 bits fazerem matemática, você precisará usar a biblioteca BCMath para fazer a matemática como seqüências de caracteres:
$timestamp = bcdiv('1234567899000', '1000');
Para obter um registro de data e hora do Unix, você pode usar o strtotime()
que retorna um registro de data e hora do Unix:
$timestamp = strtotime('1973-04-18');
Com DateTime () você pode usar DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
Se você estiver executando o PHP 5.2, poderá usar a U
opção de formatação:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
Trabalhando com formatos de data não padrão e ambíguos
Infelizmente, nem todas as datas com as quais um desenvolvedor precisa trabalhar estão em um formato padrão. Felizmente, o PHP 5.3 nos forneceu uma solução para isso. DateTime::createFromFormat()
nos permite dizer ao PHP em que formato uma string de data está, para que possa ser analisada com sucesso em um objeto DateTime para manipulação adicional.
$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
No PHP 5.4, ganhamos a capacidade de acessar membros da classe por instanciação, o que nos permite transformar nosso DateTime()
código em uma única linha:
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');