• Suporte
  • Erro horário da senha (NovoSGA 1.5 + MySQL + Servidor Windows)

Desde ontem estamos enfrentando um problema com os horários das senhas que estão sendo registradas no banco de dados com uma hora a mais.

Sei que está relacionado ao horário de verão que ia entrar e não entrou e isso está gerando o problema já conhecido da prioridade não funcionar.

Já revisamos as configurações conhecidas e compartilhadas neste fórum e no anterior. Estão OK.
@rogeriolino você pode ajudar?

Ambiente Wampserver Win64

  • NovoSGA: 1.5.1
  • Apache: 2.4.27
  • PHP: 5.6.31
  • MySQL: 5.7.19

PHPINFO - configurações DATE

date/time support: enabled
"Olson" Timezone Database Version: 2016.10
Timezone Database: internal
Default timezone: America/Sao_Paulo
Directive	Local Value	Master Value
date.default_latitude	31.7667	31.7667
date.default_longitude	35.2333	35.2333
date.sunrise_zenith	90.583333	90.583333
date.sunset_zenith	90.583333	90.583333
date.timezone	America/Sao_Paulo	America/Sao_Paulo

TESTES REALIZADOS

Servidor windows: no CMD

  • comando TIME - mostra o horário correto
  • comando tzutil /g - mostra que a time zone do servidor é "E. South America Standard Time"
  • comando tzutil /l - mostra que "E. South America Standard Time" é o UTC-3:00 Brasília

NovoSGA tela Atendimento: na parte inferior mostra data e hora corretos

MySQL - após acessar o NovoSGA com login = adminsga

SELECT @@global.time_zone, @@session.time_zone; -- mostra SYSTEM para ambos

SELECT @@system_time_zone; -- mostra E. South America Standard Tim (que é o UTC-3:00 Brasília)

SELECT NOW();  -- mostra o horário correto

select u.ult_acesso from usuarios u where u.login='adminsga'; -- HORÁRIO ERRADO +1 HORA

OU SEJA... apesar do NOW() mostrar a hora correta, o horário gravado no banco de dados nas senhas e controles de acesso está sempre com 1 hora a mais.

NÃO ENTENDI O MOTIVO... COMO CORRIGIR???

Continuando as pesquisas, fui aprender sobre a "Olson" Timezone Database Version: 2016.10 que aparece nas informações do PHP Info e descobri que existe uma versão mais recente, de Jun/2018.

Criei no meu servidor um arquivo para mostrar a data e hora do PHP e descobri que está com 1 hora a mais, provavelmente é esta hora que está sendo gravada pela aplicação no banco de dados.

Criei o arquivo /sga/public/testedata.php com as linhas:

<?php
echo "Hora atual PHP: " . date('d/m/Y H:i:s e T P');
echo "<br>" . "Versão timezonedb: " . timezone_version_get();
echo "<br>" . "Timezone: " . date_default_timezone_get();
echo "<br>" . "Horário verão 1=sim  0=não: " . date('I'); 
echo "<br>" . phpinfo();
?>

Ao acessar http://(meu servidor)/sga/public/testedata.php mostrou:

  • Hora atual PHP: 23/10/2018 17:20:09 America/Sao_Paulo BRST -02:00
  • Versão timezonedb: 2016.10
  • Horário verão 1=sim 0=não: 1

e em seguida os dados completos da configuração atual do PHP

o BRST após o timezone indica que para o sistema estamos no horário de verão (Brasilia Summer Time)

O que vamos tentar fazer aqui:

  1. Descobrir como atualizar o Timezone Database no Windows (alguém pode ajudar?)
  2. Atualizar o PHP para usar o "Olson" Timezone Database Version 2018.6
  3. Reiniciar o servidor

Provavelmente o 'Timezone Database' foi atualizado em Junho/2018 porque em Dezembro/2017 foi publicado o Decreto Federal 9242/2017 que alterou a data de início do horário de verão no Brasil e este database deve conter a data de início e fim dos horários de verão do mundo.

Até 2017 o horário de verão no Brasil iniciava no 3º domingo de outubro e terminava no 3º domingo de fevereiro. A partir de 2018 vai iniciar no 1º domingo de novembro e terminar no 3º domingo de fevereiro.

Também descobri que o Windows e PHP usam padrões diferentes de timezone.

Windows usa o padrão 'Microsoft Windows Time Zone Database'

PHP, Java e Linux usam o padrão 'The IANA/Olson Time Zone Database'

Microsoft Windows Time Zone Database - lista completa com o comando CMD tzutil /l

Aqui estamos usando: "E. South America Standard Time" = UTC-3:00 Brasília

The IANA/Olson Time Zone Database - lista completa em http://php.net/manual/en/timezones.php
Aqui estamos usando: America/Sao_Paulo


Links

https://stackoverflow.com/tags/timezone/info - explica sobre os padrões de timezone

https://derickrethans.nl/advent21.html - mostra que o banco de dados é atualizado se algum país muda as regras

http://php.net/manual/en/timezones.php - informa que existe o database Olson de Jun/2018

http://pecl.php.net/package/timezonedb - download do Olson timezone database atual: timezonedb-2018.6.tgz

https://stackoverflow.com/questions/13524812/setting-a-php-timezone-cant-update-to-recent-olson
aqui um russo reporta 5 anos atrás um problema semelhante, a Rússia alterou o horário de verão e ele precisou atualizar o banco de dados de timezone Olson e reiniciar o servidor

http://php.net/manual/pt_BR/function.date.php - mostra os parâmetros para mostrar uma data no PHP

https://en.wikipedia.org/wiki/Time_in_Brazil - mostra os timezones do Brasil

https://www.timeanddate.com/news/time/brazil-postpones-dst-2018.html - notícia sobre a mudança de horário de verão no Brasil em site que registra as mudanças no mundo

No caso do servidor Windows não tenho muito o que ajudar. Tive o problema de horário de verão no PostgreSQL em servidor Linux. Foi resolvido reiniciando o serviço:

service postgresql restart

    Estou tendo o mesmo problema, alguma solução ai ?

    Olá,

    Revisando os links que eu havia compartilhado ontem, descobri em um comentário de uma das páginas a informação "Since 2014.10 version the extension can be downloaded as dll for windows, please refer to pecl.php.net/package/timezonedb"

    Portanto a solução para atualizar o Timezonedb no PHP parece ser:

    Servidor Linux - baixe o arquivo https://pecl.php.net/get/timezonedb-2018.6.tgz e instale
    Servidor Windows - baixe a dll para a sua versão de PHP e instale
    https://pecl.php.net/package/timezonedb/2018.6/windows

    Após instalar reinicie o servidor.
    Faça isso apenas se não tiver nenhuma senha emitida aguardando atendimento pois as novas senhas serão emitidas com 1 hora a menos do que as já emitidas no dia.

    Vamos fazer isso hoje no final do expediente, pois no momento nosso servidor de homologação está sendo usado por uma das áreas para treinamento de atendimento real.

    @rogeriolino e @boiteux21 se não quiser / puder atualizar a timezonedatabase, uma solução de contorno que vale tanto para Windows como Linux é alterar o php.ini para:

    date.timezone = "America/Bahia" 

    (não tem horário de verão) , portanto vai usar UTC-03:00

    Fizemos aqui e funcionou.

    No dia 04/11/2018 vamos voltar para date.timezone = "America/Sao_Paulo" para usar o UTC-02:00

    Lembrar de reiniciar o Wamp e fazer em um horário em que não exista nenhuma senha emitida aguardando atendimento.

    rogeriolino :-(

    Conferi horários e timezones do SERVIDOR, do POSTGRESQL, do PHP, verifiquei o php.ini, limpei os caches... não importa o que faça NÃO consigo mudar o horário do NovoSGA 1.5.1.

    Alguém está passando pelo mesmo?

      fielcomunista aqui ainda não conseguimos atualizar a dll do servidor Windows, mas mudar o php.ini para timezone America/Bahia funcionou. No dia 4/11 vamos voltar para America/Sao_Paulo.

      É necessário reiniciar o servidor 😉

      Descobri que aqui o problema não é, necessariamente, no sistema. Todas as horas de senhas, relatórios, etc. estão corretas e em acordo com o servidor.

      O único horário que gerou reclamação por parte dos usuários foi a hora que aparece na tela do módulo MONITOR. Só que não consigo entender porque ele mostra uma hora a menos que a hora de todo o sistema.

      Vou tentar alterar o arquivo que você compartilhou referente ao PHP, que nesse servidor é a versão 5.6.
      Em outro servidor com a versão 7.3 não tivemos qualquer problema.

      Obrigado, @Vera!

      3 meses depois

      Estou com o mesmo problema na tela do módulo Monitor, ele apresenta uma hora a menos. Você conseguiu resolver o problema?

      @plarruda79 aqui na tela monitor quando clico em uma senha está mostrando corretamente o horário da emissão.
      Só para relembrar: versão 1.5 + ambiente Windows + MySQL

        Vera

        É o horário que fica marcado no canto inferior direito da tela e não o horário de emissão da senha pois o meu também está correto.

        @plarruda79 aqui o horário está correto nas senhas e no horário do canto inferior direito da tela Monitor e da tela Atendimento.

        9 meses depois

        Mudando as configurações Alterar Fuso Horário no computador windows do usuário que acessa o Novo SGA, altera a hora exibida no relógio na canto inferior direito nas telas do atendimento e do monitor.

        Alterei o php.ini para timezone da Argentina e funcionou

        19 dias depois

        Alterei o arquivo: /etc/php5/apache2/php.ini
        coloquei isso e funcionou:
        date.timezone = America/Fortaleza

        dei um restart no apache2 também
        /etc/init.d/apache2 restart