Sign in to follow this  
ronaldoguedess

Formatar campo "DATA" do Mercado Livre - "2016-04-05T07:08:52.406Z"

Recommended Posts

Todas as datas do mercado livre vem nesse formato:

 

EX:

received: 2016-04-05T07:08:52.406Z

 

 

Existe uma função nativa para desvendar essa data sem usar o explode?

pois não consegui identificar esse formato!

 

criei uma função usando explode para pegar a data e a hora.. mas gostaria de saber se existe um metodo melhor!

 

 

 

 

Share this post


Link to post
Share on other sites

Para não guardar o conhecimento apenas para mim, irei postar aqui caso alguém precise!

 

Descobri por acaso... mas não encontrei na documentação nada a respeito! talvez exista uma forma melhor.. mas essa foi a que eu encontrei...

 

A forma que recebemos a data do mercado livre, encontra em Json... nela tem algumas informações a mais como fuso horário... 

 

 

Código PHP para converter a data Json!

$a = new DateTime($datadomercadolivre);          //data recebida do mercado livre EX de retorna da var: 2016-04-05T15:07:16.000-04:00
$b = $a->format('d/m/Y H:i');                    //novo formato da data, da pra alterar como desejar.

Apenas sabendo o formato da data é possível converte-la para quaisquer forma possível... 

Share this post


Link to post
Share on other sites

Acho importante compartilhar o conhecimento, mas é importante compartilhar um conhecimento CORRETO...

 

 

JSON não tem nada haver com o formato de data, JSON é uma forma de notação adota pelo JavaScript (JSON = JavaScript Object Notation), sendo amplamente utilizada hoje em outras linguagens

 

a data está no formato ISO 8601 (https://en.wikipedia.org/wiki/ISO_8601), conforme documentação na área design considerations

 

http://developers.mercadolibre.com/design-considerations/

 

pelo visto não leu adequadamente a documentação ... em geral a maioria deixa de lado uma das principais partes das documentações : design considerations (onde é explanado todas as convenções utilizadas) e parte direto pro "vamo copiando e colando e vê no que dá..."

 

 

confirme disse acho importante compartilhar conhecimentos, mas conhecimentos válidos e não redundantes, essas informações estão na documentação e a função DateTime é uma função básica do PHP (linguagem por sinal simples e que possui vasta documentação em PHP.net)

Share this post


Link to post
Share on other sites

Realmente... estou vendo um pouco mais sobre isso!

até notei que o exemplo que postei acima esta com bug...

 

ele pega o horário errado... 

algum erro por causa do timezone...

 

alguém sabe como consertar?

Share this post


Link to post
Share on other sites

consertar!!!!!

 

já foi discutido timezone no fórum. use o campo de pesquisa.

E por mais incrível que pareça eu forneci o código

 

_____________________________________________________________________________________________

Desenvolvedor ASP PHP/CSS Javascript/Jquery SQL MySQL ORACLE LabVIEW  VB ...

e agora corretor ortográfico deste fórum

Share this post


Link to post
Share on other sites

;)

 

 

Sério? não estou encontrando...

pesquisei tudo que veio na cabeça já! :(

 

Todas as pesquisas retornam para esse tópico! :(

 

 

uma solução que encontrei foi usar o date_add:

date_add($a,date_interval_create_from_date_string("-03 hours"));

Se puder compartilhar a forma correta de manipular essa data vai me ajudar...

desde já... Obrigado!

Share this post


Link to post
Share on other sites

Conforme eu falei já compartilhei.

Você deve estar utilizando a pesquisa no campo search pré-setado com "this topic", mude para "forums" e encontrará.

Olha eu aqui ensinando como se usa um forum...

 

A solução que você desenvolveu não é eficiente, pois quando entrar o horário de verão o cálculo falhará.

 

Vale lembrar que o uso do ISO 8601 é devido ser relativo ao calendário gregoriano, adotado (ou imposto) por muitas nações como forma de unificar os calendários e evitar transtornos.

 

Há uma curiosidade sobre este calendário: ele substituiu o calendário juliano, para corrigir erros de cálculos periódicos, a data do equinócio de primavera(hemisfério norte) em 10 dias (agora é 21 de março) e que acabou suprimindo estes 10 dias na história, de 5 a 14 de outubro de 1582. Então se você encontrar um documento datado neste intervalo ele pode ser falso. :)

 

O calendário juliano já tem uma história interessante, pois o Julio Cesar incluiu 2 meses no calendário de Rômulo(romano) que só continha 10 meses, fazendo que o número do mês não mais se valesse pelo nome. Ora, se Setembro é parecido com 7, porque é o mês 9? E assim por diante até dezembro. Ainda ganhou como homenagem do senado o seu nome no sétimo mês do ano e mais tarde Augustus, outro FDP, trocou o nome do mês de sextilis(oitavo mês) para agosto (Augustus).

Se a conta do número do mês não bate deve ser porque o ano começava em março e então o calendário foi deslocado para cima e não para baixo :)

Share this post


Link to post
Share on other sites

hahaha. realmente... eu não estava alterando para tópicos... eu encontrei.. obrigado...

 

muito interessante essa explicação que você passou acima... agora conheci um pouco da história!

 

 

Postando o código com umas alterações pra facilitar quem esta iniciando!

nele acrescentei a função do datatime (diff) e mostrei como calcular a diferença de datas!

 

O código abaixo é uma alteração pra postar, o que estou usando esta um pouco diferente...

 

Acredito que poderá ajudar alguém!

$timehoje = new DateTime('NOW'); //pega data atual para usar no calculo de diferença que sera mostrado no final do código.

$tz = new DateTimeZone('America/Sao_Paulo');
$dh = new DateTime($question->date_created); //campo do mercado livre que deseja pegar a data e corrigir para exibir: $question->date_created 
$dh->setTimeZone($tz);


$datahora = $dh->format('d/m/Y H:i:s'); //Caso queira personalizar a forma de mostrar a data, é só alterar aqui.
echo "Data Correta: $datahora <br>";
 
 
$intervalo = $timehoje->diff( $dh ); //para mostrar quantas horas/dias/mes

echo $intervalo->d; //mostra a quantidade de dias
echo "<br>";
echo $intervalo->m; //mostra a quantidade de minutos
echo "<br>";
echo $intervalo->h; //mostra a quantidade de horas
echo "<br>";


unset($dh);
unset($datahora);
unset($tz);
unset($intervalo)

Obrigado Rodrigo! 

Obrigado mesmo!!!!!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this