Existe uma maneira simples de converter um formato de data para outro formato de data no 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 é claro que eu gostaria que retornasse uma data atual, em vez do amanhecer. O que estou fazendo errado?
Respostas:
O segundo parâmetro para
date()
precisa ser um carimbo de data / hora adequado (segundos desde 1 de janeiro de 1970). Você está passando uma string que date () não pode reconhecer.Você pode usar strtotime () para converter uma string de data em um carimbo de data / hora. No entanto, mesmo strtotime () não reconhece o
y-m-d-h-i-s
formato.PHP 5.3 e superior
Use
DateTime::createFromFormat
. Ele permite que você especifique uma máscara exata - usando adate()
sintaxe - para analisar as datas de string recebidas.PHP 5.2 e inferior
Você precisará analisar os elementos (ano, mês, dia, hora, minuto, segundo) manualmente usando
substr()
e entregando os resultados para mktime () que criará um carimbo de data / hora.Mas isso dá muito trabalho! Eu recomendo usar um formato diferente que o strftime () possa entender. strftime () entende qualquer entrada de data que não seja
the next time joe will slip on the ice
. por exemplo, isso funciona:fonte
DateTime
existe desde o PHP 5.2 no núcleo do PHP e o suporte experimental paraDateTime
pode ser ativado para o PHP 5.1 na compilação. secure.php.net/manual/en/datetime.installation.phpA maneira mais fácil de fazer isso é
Você está dando primeiro a ele o formato $ dateString. Depois, você está dizendo o formato em que deseja que $ newDateString esteja.
Isso também evita o uso de strtotime, que pode ser difícil de trabalhar às vezes.
Se você não está transformando de um formato de data para outro, mas apenas deseja a data atual (ou data e hora) em um formato específico, é ainda mais fácil:
Essa outra pergunta também se refere ao mesmo tópico: Converter formato de data aaaa-mm-dd => dd-mm-aaaa .
fonte
$timestring = $now->format('Y-m-d h:i:s');
certamente?m
por meses,i
por minutosO básico
A maneira simplista para converter um formato de data para outra é usar
strtotime()
comdate()
.strtotime()
converterá a data em um carimbo de data e hora do Unix . Esse carimbo de data e hora do Unix pode ser passadodate()
para convertê-lo no novo formato.Ou como uma linha:
Lembre-se de que
strtotime()
exige que a data esteja em um formato válido . A falha em fornecer um formato válido resultará nostrtotime()
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 usandoDateTime()
o seguinte: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ê:DateTime () funciona com registros de data e hora do Unix adicionando um
@
antes do registro de data e hora: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:substr()
O corte dos três últimos dígitos pode ser obtido de várias maneiras, mas o uso
substr()
é o mais fácil: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:
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:Com DateTime () você pode usar
DateTime::getTimestamp()
Se você estiver executando o PHP 5.2, poderá usar a
U
opção de formatação: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.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:fonte
Tente o seguinte:
fonte
Para converter
$date
a partirdd-mm-yyyy hh:mm:ss
de uma data e hora MySQL apropriado que eu vá como este:fonte
Fatal error: Call to a member function format() on a non-object
. Apenas um alerta!A seguir, é um método fácil de converter datas em diferentes formatos.
fonte
você está fazendo errado aqui, isso deve ser
separador de tempo é ':'
Eu acho que isso ajudará...
OU
fonte
Essa maneira nativa ajudará a converter qualquer formato inserido no formato desejado.
fonte
Você precisa converter o $ old_date novamente em um registro de data e hora, pois a função date exige um registro de data e hora como seu segundo argumento.
fonte
strtotime resolverá isso. as datas não são as mesmas e estão todas no formato americano.
fonte
Tente o seguinte:
fonte
Isso resolveu para mim,
Saída: 2018-04-18
fonte
Essa é a outra maneira de converter o formato da data
fonte
Apenas usar strings, para mim é uma boa solução, menos problemas com o mysql. Detecta o formato atual e altera, se necessário, esta solução é apenas para o formato espanhol / francês e inglês, sem usar a função php datetime.
USAR
fonte
Sei que isso é antigo, mas, ao encontrar um fornecedor que usa inconsistentemente 5 formatos de data diferentes em suas APIs (e servidores de teste com uma variedade de versões PHP dos anos 5 aos 7), decidi escrever um conversor universal que trabalha com uma infinidade de versões do PHP.
Esse conversor aceita praticamente qualquer entrada, incluindo qualquer formato padrão de data e hora (incluindo com ou sem milissegundos) e qualquer representação do Epoch Time (incluindo com ou sem milissegundos) e a converte em praticamente qualquer outro formato.
Para chamá-lo:
O envio de nulo para o formato fará com que a função retorne a data e hora no Epoch / Unix Time. Caso contrário, envie qualquer string de formato suportada por date (), bem como com ".u" por milissegundos (eu trato de milissegundos também, apesar de date () retornar zeros).
Aqui está o código:
Aqui estão alguns exemplos de chamadas - você também observará que ele lida com qualquer dado de fuso horário (embora, como mencionado acima, qualquer horário não GMT seja retornado no seu fuso horário).
Aqui está a saída:
A única coisa que não está nesta versão é a capacidade de selecionar o fuso horário em que você deseja que o horário de retorno retorne. Originalmente, escrevi isso para alterar qualquer horário para Epoch Time; portanto, não precisava de suporte de fuso horário. É trivial adicionar isso.
fonte