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 :)
0 comentários:
Postar um comentário