Atualização do horário de verão no PHP
Publicado em Developer
Para os que pensavam que eu trabalho todo dia com Rails, devo dizer que estão enganados, ainda mantenho alguns projetos grandes com PHP e não vai dar para migrar tão cedo por causa de uma coisa chamada tempo, que desaparece mesmo com todos os ganhos de produtividade que o Rails nos dá, mas enfim ... ainda uso bastante PHP. :-)
E nesses últimos dias tive um problema com o horário de verão. Depois que foi anunciado oficialmente, atualizei os meus computadores de acordo com as instruções mas servidor web insistia em mostrar a hora adiantada. Aí fiz uma pesquisa rápida e descobri (é, só vim a saber disso agora, vergonha!) que o PHP mantém um banco de dados de timezones similar ao Java, por um lado pior e por um lado melhor.
Pior pois no Java dá para fazer algumas gambiarras e criar uma timezone com o horário de verão customizado, melhor pois no PHP dá para se atualizar o banco de dados usando uma extensão chamada timezonedb, mas há de se esperar que seja atualizada com as últimas alterações do nosso horário de verão.
Por sorte enviei um email para o mantenedor da extensão, e sorte ou coincidência, poucos minutos após ele responder o email enviou outro com a atualização da mesma. Eu fiz um teste antes de habilitar a extensão:
[taq@~]php -r "print date('d/m/Y H:i:s e T');" 17/10/2006 19:31:01 America/Sao_Paulo BRSTApós atualizar a extensão (que deve ser devidamente indicada no arquivo php.ini como extension=timezonedb.so), o comando acima me retornou:
[taq@~]php -r "print date('d/m/Y H:i:s e T');" 17/10/2006 18:31:01 America/Sao_Paulo BRT
Ou seja, o horário correto, pois nosso horário de verão só começa no próximo dia 5 de Novembro.
Comentários
Comentários fechados.
Artigos anteriores
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300
- Utilizando muitas gems no seu projeto? - sáb, 29 de outubro de 2016, 11:57:55 -0200
- Desenvolvedores e inteligência artificial - seg, 11 de julho de 2016, 09:09:38 -0300
Só para deixar o post perfeito, comando para instalar a lib no Linux:
pecl install timezonedb
só descomentei e modifiquei essa linha no php.ini e funcionou.
date.timezone = Etc/GMT+2
ficou com o horário de brasilia!
na verdade é um fuso a mais, porque internacionalmente não existe horário de verão, mas para aqueles que precisam adiantem um fuso.
Se eu estiver falando besteiras é só falar.
Uma outra forma de fazer que deu certo pra mim com PHP4 foi jogar essa função no início do código (num include desses qq):
putenv("TZ=America/Sao_Paulo");
É possível ver aqui a lista de zonas: http://www.theprojects.org/dev/zone.txt
Eita, não sabia disso também... Valeu a dica!
Instructions on how to update PHP's timezonedb
http://fischer.tecnologia.ws/en/node/1