Gosto muito da strtotime()
função, mas o manual do usuário não fornece uma descrição completa dos formatos de data suportados. strtotime('dd/mm/YYYY')
não funciona, funciona apenas com o mm/dd/YYYY
formato.
Se eu tiver data no dd/mm/YYYY
formato, como posso convertê-la para YYYY-mm-dd
? Eu posso fazer isso usando a explode()
função, mas acho que existem soluções melhores.
str_replace('/', '-', $date);
Respostas:
Aqui está a solução simplificada:
Resultado:
A
strtotime
documentação diz:fonte
echo date('Y-m-l', strtotime('01-01-2010'));
O resultado é2010-01-Friday
. Portanto, o dia que chega ao final depende de como você especifica o formato da data para adate
função.$date = '25/05/2010'; $date = str_replace('/', '-', $date);
A linha adicional não é necessária para resolver o seu problema.Você pode analisar datas de um formato personalizado (a partir do PHP 5.3) com DateTime :: createFromFormat
(Além disso:
!
é usado para redefinir valores não especificados para o registro de data e hora do Unix, ou seja, o horário será meia-noite.)Se você não deseja (ou não pode) usar o PHP 5.3, uma lista completa dos formatos de data / hora disponíveis aceitos pelo strtotime está listada na página de manual Formatos de data . Essa página descreve mais profundamente o fato de que
m/d/Y
é inferida ao longod/m/Y
(mas você pode, como mencionado nas respostas aqui, usod-m-Y
,d.m.Y
oud\tm\tY
).No passado, eu também recorri ao quicky
str_replace
mencionado em outra resposta, além de analisar automaticamente a sequência de datas em outro formato comofonte
Esta é uma boa solução para muitos problemas:
fonte
Na gravação STRTOTIME Nota:
As datas nos formatos m / d / a ou dmy são desambiguadas observando o separador entre os vários componentes: se o separador é uma barra (/), então o m / d / a americano é assumido; enquanto que se o separador for um hífen (-) ou um ponto (.), o formato dmy europeu é assumido.
É tão simples quanto isso.
fonte
$t
e estou$t1
mostrando resultados diferentes. Eu verifiquei assim.$t=strtotime(date('d-m-Y'));
e$t1=strtotime(date('m/d/Y'));
mais rápido provavelmente deve ser
isso retornará false se o formato não se parecer com o correto, mas não verificará se a data é válida
fonte
Não encontrei uma solução melhor. Você pode usar
explode()
,preg_match_all()
etc.Eu tenho uma função auxiliar estática como esta
Provavelmente existe um nome melhor para isso, mas uso
ausStrToTime()
porque funciona com datas australianas (com as quais costumo lidar, sendo australiana). Um nome melhor provavelmente seria o nome padronizado, mas não tenho certeza do que seja.fonte
Tentei converter o formato ddmmyy para o
date("Y-m-d"
formato, mas não estava funcionando quando passo diretamenteddmmyy =date('dmy')
então percebi que deveria estar no formato aaaa-mm-dd. substring usado para organizar
depois passou para
date("Y-m-d",strtotime($strParam));
funcionou!
fonte
$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');
Isso funcionará para você. Você converte a String em um formato de data personalizado, onde pode especificar para o PHP qual o formato original da String que foi fornecido a ela. Agora que é um formato de data, você pode convertê-lo no formato de data padrão do PHP, que é o mesmo usado pelo MySQL.
fonte
Você está obtendo esse valor de um banco de dados? Nesse caso, considere formatá-lo no banco de dados (use
date_format
no mysql, por exemplo). Caso contrário, explodir o valor pode ser a melhor aposta, pois o strtotime simplesmente não parece apreciar os valores dd / mm / aaaa.fonte
Se você souber que está em dd / mm / AAAA, você pode:
Ele corresponderá às datas no formato d / m / AA ou dd / mm / AAAA (ou qualquer combinação dos dois) ...
Se você deseja oferecer suporte a mais separadores do que apenas /, altere a regex para:
E, em seguida, adicione os caracteres desejados ao
[/-]
bit (observe que o caractere - precisa ser o último)fonte
\d
para dígitos decimais em vez de[/d]
para a frente-slash ou personagem d .Esta solução alternativa é mais simples e elegante do que explodir:
Você não precisa saber em que formato está obtendo a data, mas, se houver barras, elas serão substituídas por pontos finais e serão tratadas como européias por hora do strtotime.
fonte
A solução mais simples é esta:
fonte
Esta é a solução que estou usando, mesmo que o zero inicial esteja lá.
fonte
$ date_info = '20 / 02/2019 '; data do eco ('Ym-d', strtotime (str_replace ('/', '-', $ date_info)));
fonte
Simples como este
fonte