Ir para conteúdo

POWERED BY:

Arquivado

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

GuiiJC

TRABALHANDO COM DATA - Oracle e PHP

Recommended Posts

Galera, to com um problema bem chato de resolver que tá me dando dor de cabeça a algum tempo.

Eu tenho um campo date no Oracle 11g, eu pego ele com php e jogo dentro de um vetor.

 

Primeiro problema: ele grava como data e hora. Quando pego ele com php, só está vindo a data, mas preciso da hora tbm para fazer a condicional.
Segundo problema: tenho que formatar a data, pois não é o mesmo padrão que tem na apresentação do sistema, formatei essa data da forma correta e ele me retorna uma data muito estranha e bem antiga.

O que pode estar acontecendo??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara.. .tentou com a classe DateTime do php?

 

Eu imagino que no seu banco você deva estar gravando a data no formato ANSI (2015-06-16 00:00:00)

Você pode passar este formato para o contrutor do DateTime do PHP:

// Aqui vc informa a variável que virá do banco de dados
$data = new DateTime($suaDataHora);

Na hora de fazer a exibição você utiliza o método format():

echo $data->format('d/m/Y');

Veja se te ajuda.

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo, no campo do banco está sendo gravado da seguinte forma: 08/06/2015 12:43:13

mas na variável, quando faço o select parece assim: 08-JUN-15

 

Estou gravando no banco pela função sysdate, pensei que poderia ser ela. Então criei uma data com a função date do php e tentei inserir no banco, mas aparece a seguinte mensagem de erro quando tenta gravar o dado: Warning: oci_execute() [function.oci-execute]: ORA-01843: not a valid month

Já pesquisei pelo erro a net e nada que solucionasse consegui encontrar.

 

Cara.. .tentou com a classe DateTime do php?

 

Eu imagino que no seu banco você deva estar gravando a data no formato ANSI (2015-06-16 00:00:00)

Você pode passar este formato para o contrutor do DateTime do PHP:

// Aqui você informa a variável que virá do banco de dados
$data = new DateTime($suaDataHora);

Na hora de fazer a exibição você utiliza o método format():

echo $data->format('d/m/Y');

Veja se te ajuda.

 

Abraços,


Cara.. .tentou com a classe DateTime do php?

 

Eu imagino que no seu banco você deva estar gravando a data no formato ANSI (2015-06-16 00:00:00)

Você pode passar este formato para o contrutor do DateTime do PHP:

// Aqui você informa a variável que virá do banco de dados
$data = new DateTime($suaDataHora);

Na hora de fazer a exibição você utiliza o método format():

echo $data->format('d/m/Y');

Veja se te ajuda.

 

Abraços,

acabei de usar, a formatação ficou correta, da forma que preciso.
mas também preciso da hr:mi:ss e o banco não tá me enviando esses dados, não sei por qual motivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa...

 

Então cara... no mysql eu tenho uma função que me retorna a data no formato que eu quiser, imagino que no oracle deva ter também visto que são da mesma empresa, tenta encontrar algo semelhante a DATE_FORMAT, só uma pergunta, qual o tipo de campo que está armazenando a data, é um varchar ou um datetime?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo date , já procurei e não encontrei nada sobre date_format para oracle :s

 

Opa...

 

Então cara... no mysql eu tenho uma função que me retorna a data no formato que eu quiser, imagino que no oracle deva ter também visto que são da mesma empresa, tenta encontrar algo semelhante a DATE_FORMAT, só uma pergunta, qual o tipo de campo que está armazenando a data, é um varchar ou um datetime?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo, dá o seguinte erro quando executo no pl/sql :ORA-01843: not a valid month
Encontrei um jeito que aparece formatado do jeito que preciso, executo no pl/sql e ele retorna da maneira correta, Mas no vetor php das datas aparece com todos os campos vazios.

 

Fiz da seguinte forma:
SELECT MSGID, MSGISEQ,TO_CHAR (MSGIDATAINC, 'DD-MM-YY HH24:MI:SS '), MSGIREDUSU,MSGIPERFIL, MSGISTATUS, MSGICORPO, MSGICONTROLE, MSGIUSUARIOID FROM EGSOLUTIONS.MENSAGENSITENS

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... neste caso (onde a data está sendo formatada na própria saída do banco) você tem que instanciar o dateTime de outra forma, assim poderá comparar ele usando o próprio date time.

 

vai ficar mais ou menos assim:

$data = DateTime::createFromFormat('d-m-Y G:i:s', $dataVindaDoBanco);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada, ele nem dá echo na variável.

vey, pk é tão dificil trabalhar com data em oracle?? :@

 

Então... neste caso (onde a data está sendo formatada na própria saída do banco) você tem que instanciar o dateTime de outra forma, assim poderá comparar ele usando o próprio date time.

 

vai ficar mais ou menos assim:

$data = DateTime::createFromFormat('d-m-Y G:i:s', $dataVindaDoBanco);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eita...

 

Eu costumo gravar no banco de dados a data no formato ANSI e fazer o tratamento no PHP.

Geralmente num me dá dor de cabeça... rs

 

Agora se você der um echo na variável que vem do banco, como ela está chegando?

 

Ah... outro detalhe, para ele retornar a variável com o nome certo, pode ser necessário um alias para ela, tipo assim:

SELECT MSGID, MSGISEQ,TO_CHAR (MSGIDATAINC, 'DD-MM-YY HH24:MI:SS ') AS MSGIDATAINC, MSGIREDUSU,MSGIPERFIL, MSGISTATUS, MSGICORPO, MSGICONTROLE, MSGIUSUARIOID FROM EGSOLUTIONS.MENSAGENSITENS

Compartilhar este post


Link para o post
Compartilhar em outros sites

continua não me retornando hh:mi:ss.
Como faz para gravar em formato ANSI??

 

 

Eita...

 

Eu costumo gravar no banco de dados a data no formato ANSI e fazer o tratamento no PHP.

Geralmente num me dá dor de cabeça... rs

 

Agora se você der um echo na variável que vem do banco, como ela está chegando?

 

Ah... outro detalhe, para ele retornar a variável com o nome certo, pode ser necessário um alias para ela, tipo assim:

SELECT MSGID, MSGISEQ,TO_CHAR (MSGIDATAINC, 'DD-MM-YY HH24:MI:SS ') AS MSGIDATAINC, MSGIREDUSU,MSGIPERFIL, MSGISTATUS, MSGICORPO, MSGICONTROLE, MSGIUSUARIOID FROM EGSOLUTIONS.MENSAGENSITENS

Achei o problema --'.
Na verdade são dois.
um era a configuração do banco que estava diferente da do meu computador, então se eu trocasse a mascara na hora de incluir a data dava erro. Se não usasse o AS MSGIDATAINC também me retornava uma data bagunçada, mesmo depois de achar o ero principal.
Porém, o mais burro foi eu, que na função onde crio o array das data e hora, eu dei um explode com " ",e a separação da data e hora é feito por " ", então ele estava omitindo a mesma.
Trocando o " " por ";" resolveu.

Vllw Rodrigo, me ajudou muito

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.