Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

terra

formato de data pelo php

Recommended Posts

Olá,

 

então minha duvida é simples, mas não estou conseguindo fazer, tentei algumas coisas mas nada deu certo. Não quero mudar a forma de inserir e nem mudar no mysql.

 

Quero mudar a data no formato 20130912210100 para 2013-09-12

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

2013-09-12 é formato padrão de um campo date...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu gravo no bd assim 20130912210100, não posso mudar pq tem varias coisas que usa nesse formato. Tenho uma aplicação que preciso usar no 2013-09-12 pq pego de um $_GET

 

então eu preciso transformar a data 20130912210100 em 2013-09-12 e comparar com $_GET e mostrar o resultado

 

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

20130912210100 em 2013-09-12:

 

 

$d = '20130912210100';#vem via GET??
 
$x = substr($d,0,8);
$y = substr($x,0,4);
$m = substr($x,4,2);
$d = substr($x,6,2);
 
$data = $y.'-'.$m.'-'.$d;
echo $data;

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://br2.php.net/manual/pt_BR/function.strtotime.php

date('Y-m-d', strtotime('20130912210100'));

ou do jeito legal:

(new DateTime('20130912210100'))->format('Y-m-d');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

 

preg_match()

substr()

implode()

E para finalizar você utiliza um if/else e terá o que precisa.

<?php
// Sua String
$string = '20130912whatever';
// Expressao Regular (PCRE)
$expressaoRegular = '/[0-9]{8}/';
// Função preg_match()
preg_match($er, $string, $resultado);
// Um array
$parteData = array(); 
// Função substr()
$parteData[0] = substr($resultado[0], 0, 4);
$parteData[1] = substr($resultado[0], 4, -2);
$parteData[2] = substr($resultado[0], 6, 7);
// Função implode()
$data = implode('/',$parteData);
// Seu get
$_GET = '2013/09/12';
// Comparação
if($data === $_GET){
	echo "As datas são idênticas.";
}
else {
	echo "As datas são diferentes.";	
}
?>

Lembrando que se mudar o formato da data para por exemplo (2013098), a ER falhará e todo o resto consequentemente.

 

Espero que ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

 

preg_match()

substr()

implode()

E para finalizar você utiliza um if/else e terá o que precisa.

<?php
// Sua String
$string = '20130912whatever';
// Expressao Regular (PCRE)
$expressaoRegular = '/[0-9]{8}/';
// Função preg_match()
preg_match($er, $string, $resultado);
// Um array
$parteData = array(); 
// Função substr()
$parteData[0] = substr($resultado[0], 0, 4);
$parteData[1] = substr($resultado[0], 4, -2);
$parteData[2] = substr($resultado[0], 6, 7);
// Função implode()
$data = implode('/',$parteData);
// Seu get
$_GET = '2013/09/12';
// Comparação
if($data === $_GET){
	echo "As datas são idênticas.";
}
else {
	echo "As datas são diferentes.";	
}
?>

Lembrando que se mudar o formato da data para por exemplo (2013098), a ER falhará e todo o resto consequentemente.

 

Espero que ajude.

whyyyyyy????

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendo o porque, quando falamos em "data no php", os programadores gostam de complicar tanto.

 

A resposta mais que completa está no post #9. É recomendado o uso da biblioteca DateTime no lugar das antigas funções date.

 

P.S.: post #10 me deu calafrios...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse cara matou uma barata com uma bazuca.

esse é o objetivo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, eu nem tinha percebido que, uns posts mais tarde, ele disse que precisava comparar

[inline]'20130912210100'[/inline] com [inline]'2013-09-12'[/inline].

 

Mas, ainda assim, o mais sobrinho que consegui imaginar foi um substr com str_replace


$data_do_db = '20130912210100';
$_GET['data'] = '2013-09-12';

var_dump(str_replace('-', '', $_GET['data']) === substr($data_do_db, 0, 8));

Ainda assim, ambos os formatos são compatíveis com DateTime.

$data_do_db = new DateTime('20130912210100');
$data_do_db->setTime(0, 0);
var_dump($data_do_db == new DateTime('2013-09-12'));

Compartilhar este post


Link para o post
Compartilhar em outros sites

nossa..... acho que o Gabriel Heming tem razão....

 

1º ponto do problema, você precisa ter um padrão ou no formato do BD ou no formado do GET, ambos são compatíveis com o datatime.

2º após esta "normalização" da variável você trabalhar com ela, fazendo as comparações, cálculos e etc;

 

 

O maior problema que vejo nas questões de datas e que o padrão do BD e diferente do que utilizamos no Brasil então sempre que vamos gravar e exibir as datas precisamos fazer as conversões. O problema da conversão e que existe milhares maneiras de se fazer e as vezes o pessoal vai por uma caminho mais difícil.



<?php

$data = '20130912210100';

echo date('Y-m-d', strtotime($data));


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

P.S.: post #10 me deu calafrios...

 

@Gabriel Heming, explique para nós o motivo do seu medo?

 

Só implementei isso que o leozitho comentou:

 

Neste formato você só vai conseguir trabalhar fazendo uma gambiarra com REGEX ou com a função substr, pois não é um formato conhecido pelo PHP

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Heming, explique para nós o motivo do seu medo?

 

Só implementei isso que o leozitho comentou:

Vide post #13 e #14.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, esse formato de data (20130912210100) não é comum, eu pelo menos nunca vi e já trabalho há uns 6 anos com programação.

 

Este formato se quer é referenciado no manual do PHP. Por este motivo eu a principio havia dito no post #5 que teria que fazer uma gambiarra com substr ou REGEX. Mas estranhamente o PHP reconhece este formato.

 

De qualquer forma não é o formato indicado para usar com banco de dados, já que existem tipos específicos de campo para trabalhar com datas no banco de dados, o DATE, DATETIME e TIMESTAMP.

 

Acredito que pelo mesmo motivo do formato não ser comum é que alguns colegas mostraram exemplos de código com substr, mas como já foi mostrado o PHP reconhece este formato e é possível trabalhar com strtotime.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.