Re: [zfbrasil] Manipular Hora/Minutos ZF1

22 views
Skip to first unread message

Leonardo C

unread,
Jun 11, 2013, 6:31:29 PM6/11/13
to zfbr...@googlegroups.com
Grava como INT no banco e usa o Zend_Date pra gerenciar isso. Escreve
a hora no banco com a função time() do PHP.

Em 11 de junho de 2013 17:54, Antonio Fernandes Neto
<fox...@gmail.com> escreveu:
> Bom dia a todos, sou novo no grupo, mas já venho acompanhando ele a uns 2
> meses, já tirei bastante duvidas em "off" e agora chegou a hora de
> perguntar, pois já não consigo mais pensar em nada.
> Tenho 4 campos no form onde vou colocar somente hora:min:seg e preciso, por
> exemplo, ver a diferença em hora:min:seg do campo2 e campo1 do form.
>
> Exemplo:
> Campo1 = 10:22:11
> Campo2 = 11:22:11
>
> A diferença ficou em 01:00:00
>
> E meu problema começa no banco, crio ele como DATETIME ou somente TIME? E
> como gravar isso no banco se for só TIME?
>
> Sei que para gravar com DATETIME posso fazer da seguinte forma $campo1 = new
> Zend_Date("10/02/2013 10:22:11"); e na hora de gravar
> obj->getData()->get('yyyy-MM-dd HH-mm-ss'). Assim está funcionando.
>
> Então para finalizar minhas duvidas são, trabalhar com DATETIME ou TIME e
> como calcular essas diferenças entre horas.
>
> --
> --
> Essa mensagem faz parte do grupo "zfbrasil" no Google Groups.
> Para escrever neste grupo, envie um email para zfbr...@googlegroups.com
> Para se desligar do grupo, envie um email para
> zfbrasil-u...@googlegroups.com
> Mais informações, visite o grupo em
> http://groups.google.com/group/zfbrasil?hl=pt-BR
> ---
> Você está recebendo esta mensagem porque se inscreveu no grupo "Zend
> Framework Brasil" dos Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie
> um e-mail para zfbrasil+u...@googlegroups.com.
> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
>
>



--
Leonardo C.

Renato Mendes Figueiredo

unread,
Jun 12, 2013, 10:55:28 AM6/12/13
to ZF Brasil
Tem várias maneiras de fazer, segue aqui um caminho:

   $date1 = new Zend_Date('10:22:11', 'HH:mm:ss');
        
        $date2 = new Zend_Date('11:22:11', 'HH:mm:ss');
        
        // Aqui você pode substrair e vai obter a diferença em segundos
        $emSegundos = $date1->getTimestamp() - $date2->getTimestamp();
        
        // Ou você pode usar o próprio Zend Date
        $diference = $date2->compareTime($date1);

---------------------------------------------------------
Renato Mendes Figueiredo
(61) 9122-5946 ou (61) 3345-8648


2013/6/11 Leonardo C <lcer...@gmail.com>

Antonio Fernandes Neto

unread,
Jun 13, 2013, 9:45:12 AM6/13/13
to zfbr...@googlegroups.com
Renato muito obrigado por sua atenção em responder.
Primeiro o método que retorna em segundos já resolve meu problema, ele estava apenas invertido retornando número negativo, mas você deu a ajuda precisa.

E o segundo método retorna sempre 1, independente do valor passado.

E agora é como gravar essa hora no banco de dados, pois ele está gravando só o valor da hora nos segundos. Exemplo:

10:00:20 ele grava 00:00:10

Pode me da uma luz de como gravar isso no banco, sendo que o campo é do tipo TIME?

Renato Mendes Figueiredo

unread,
Jun 13, 2013, 3:35:33 PM6/13/13
to ZF Brasil
Pra gravar você utiliza um campo bigint e grava em unixtimestamp, utilizando a mesma função, ->getTimestamp().

Para modo leitura você faz o inverso, dá um new Zend_Date('unixtimestamp do banco', Zend_Date::Timestamp), então você pode dar o get no formato que desejar!

Eu sempre gravo minhas datas/horas em UTS no banco com campo bigint, acaba com os problemas de tipagem e facilita as conversões!

Abraço,

---------------------------------------------------------
Renato Mendes Figueiredo
(61) 9122-5946 ou (61) 3345-8648


2013/6/13 Antonio Fernandes Neto <fox...@gmail.com>

Renato Mendes Figueiredo

unread,
Jun 13, 2013, 3:36:14 PM6/13/13
to ZF Brasil
Ah sim, o método comparte citado acima, ele realmente só retorna -1, 0 e 1, pois ele apenas avisa se a data é menor, igual ou maior, apenas realmente para fins de comparação!

---------------------------------------------------------
Renato Mendes Figueiredo
(61) 9122-5946 ou (61) 3345-8648


2013/6/13 Renato Mendes Figueiredo <renato...@gmail.com>

Antonio Fernandes Neto

unread,
Jun 15, 2013, 1:54:09 PM6/15/13
to zfbr...@googlegroups.com
Queria agradecer ao Rodrigo e Leonardo por darem atenção ao tópico.

E agradecer, pois aprendi mais uma coisa (UnixTimeStamp) que certeza vai me ajudar em outro projeto, mas por enquanto eu adotei a seguinte solução.
Todos os campos onde vou precisar apenas de hora está no MySQL como TIME e para criar o objeto e depois gravar o valor no banco está dessa forma.

// Aqui é na criação do obj e setando o valor que veio do formulário.
$ocorrencia->setIrradiacao(new Zend_Date($form->getValue('acionamento'), Zend_Date::TIMES));

// E aqui é como estou fazendo (dentro do array que enviou para o ->insert()) para gravar no banco de dados
'irradiacao' => $ocorrencia->getIrradiacao()->get(Zend_Date::TIMES)

E ai o que acham, está correto ou ficou algo errado nessa implementação?
Reply all
Reply to author
Forward
0 new messages