PHP + MySQL DateTime alternativa

Eu me deparei recentemente com a dificuldade de trabalhar com as strings de data que vem das colunas do MySQL no PHP, precisei fazer umas classes por conta própria e vou compartilha-las aqui.





Quando definimos uma coluna do tipo DATE, TIME, DATETIME ou TIMESTAMP no MySQL, o valor retornado por essa coluna no PHP é uma String no formato '2015-04-03 14:31:20', até aí tudo bem, você consegue fazer operações com esses valores dentro da própria consulta usando ADDDATE(), SUBDATE(), SUBTIME() e etc, o problema começa quando voçê precisa fazer testes com esses valores no PHP e não no MySQL.

A biblioteca padrão de tempo no PHP é a DateTime que funciona basicamente com 2 classes, a DateTime e a DateInterval.

No meu caso, eu precisava registrar o momento em que o usuário começasse uma ação, quando ele abrisse a página era exibido o tempo restante para que a ação fosse concluída com base na coluna 'duração', e se já estiver passado o tempo indicado pela duração desde o início da tarefa, um botão estaria disponível.

Então eu tenho uma coluna TIMESTAMP e uma coluna TIME contendo a quantidade de tempo que o usuário precisa esperar, minha dificuldade começou quando vi que a classe nativa DateInterval do PHP não era capaz de ser instanciada com base em uma String no mesmo formato do MySQL, ela é instanciada com uma String do tipo "P10H2M3S"...

Depois de passar muita raiva desisti de fazer uma função de conversão de String e resolvi fazer uma classe própria que se familiariza melhor com essa situação :)



Como vocês podem ver, o funcionamento é bem parecido com as classes nativas do PHP, a diferença principal são os construtores que permitem que ambas sejam iniciadas com um timestamp ou com uma String no formato do MySQL.

Os métodos __toString() facilitam a impressão do objeto na tela.

Exemplo de uso:



Por enquanto é isso, espero que seja útil a alguem :)
Share on Google Plus

Sobre Unknown

Sou um entusiasta de linguagens de programação e arquitetura de software. Vejo os projetos de software como partidas de xadrez onde as linguagens, os padrões e as técnicas devem ser usados com maestria para efetuar boas jogadas.
    Blogger Comment

0 comentários:

Postar um comentário