GuiiJC 0 Denunciar post Postado Junho 16, 2015 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
RodriAndreotti 25 Denunciar post Postado Junho 16, 2015 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
GuiiJC 0 Denunciar post Postado Junho 16, 2015 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 monthJá 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
RodriAndreotti 25 Denunciar post Postado Junho 16, 2015 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
GuiiJC 0 Denunciar post Postado Junho 16, 2015 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
RodriAndreotti 25 Denunciar post Postado Junho 16, 2015 Cara, encontrei este link: https://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_commands_1029.htm#OLADM780 Tenta aí pra ver Compartilhar este post Link para o post Compartilhar em outros sites
GuiiJC 0 Denunciar post Postado Junho 16, 2015 Rodrigo, dá o seguinte erro quando executo no pl/sql :ORA-01843: not a valid monthEncontrei 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 Cara, encontrei este link: https://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_commands_1029.htm#OLADM780 Tenta aí pra ver Compartilhar este post Link para o post Compartilhar em outros sites
RodriAndreotti 25 Denunciar post Postado Junho 16, 2015 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
GuiiJC 0 Denunciar post Postado Junho 16, 2015 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
RodriAndreotti 25 Denunciar post Postado Junho 16, 2015 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
GuiiJC 0 Denunciar post Postado Junho 17, 2015 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
RodriAndreotti 25 Denunciar post Postado Junho 17, 2015 Opa... Esquenta não... precisando, estamos ai. Abraços Compartilhar este post Link para o post Compartilhar em outros sites