Olá prezados, eu novamente aqui me deparando com situação que preciso entender melhor.
Já que me disseram que eu poderia tratar meu tempo trabalhado com a função time() que ele guarda data e hora exata, mudei minha rotina para fazer dessa forma, pois achei bem mais prático e profissional, mas agora estou com o prozinho. estou gravando no meu campo “tempo_inicial”:inteiro com a função time() o inteiro que ele retorna, assim como também o no campo “tempo_final”:interiro o retorno da mesma função; mas quando eu uso o gmdate() para transformar meu interiro em hora, ele me retorna como se eu tivesse 3 horas depois do que estou agora, meu timzone é America/Recife, já conferi com um echo e ele me retorna o meu timezone certo, mas a hora quando gravado no bd com a função time() ele retorna errada. Qual seria a solução para esta situação?
Acho que tem que passar o timezone para calcular
faz um teste:
$TimeArmazenado = “1560531764”;
echo “
”.gmdate(“d/m/Y H:i:s”, $TimeArmazenado + 3600*(-3+date(“I”)));
troca o $TimeAarmazenado por um resultado do seu banco
0 -3 é o timezone
Normalmente no meu login no OnLoad coloco isso como padrão:
// Fixar TimeZone Brasil
setlocale(LC_ALL, ‘pt_BR’, ‘pt_BR.utf-8’, ‘pt_BR.utf-8’, ‘portuguese’);
date_default_timezone_set(‘America/Sao_Paulo’);
/* Define o limite de tempo do da sessão do PHP em 6 horas */
ini_set(“session.gc_maxlifetime”, “21600”);
/* Define o limitador de cache para ‘private’ */
session_cache_limiter(‘private’);
$cache_limiter = session_cache_limiter();
/* Define o limite de tempo do cache em 6 horas */
session_cache_expire(360);
$cache_expire = session_cache_expire();
Olá, cara esse caso resolveu, me trouxe a hora atual. Acredito que já que tem a configuração do timezone talvez não fosse necessário fazer exatamente desse jeito. Este sistema vai rodar em vários lugares do Brasil, e como temos mais de um timezone, eu gostaria que ao escolher o timezone do local - ex.: o America/Recife já trouxesse a hora daqui de Recife, mas quando for usado do Acre, pegasse a hora de lá. Mas não foi em vão sua resposta pois posso controlar isso no -3 que é o timezone. Valeu
o time() pega o horário do servidor, e não do local de acesso, da uma olhada na função
date_default_timezone_set, tvz ajude a setar de acordo com o local, mas teria que identificar a origem da requisição, se tiver no cadastro o estado pode ser um caminho para identificar
o +date(“I”) controla o horário de verão, não tem nas regiões Norte/Nordeste, mas sul/sudeste tem tem, mas estão falando em remover, então tvz é melhor remover para usar, no meu caso uso mais para São Paulo/Rio então precisei dele
Se quiser o horário local, teria que usar JavaScript, mas teria que confiar que o horário da maquina da pessoa esteja correto, se for para controlar horas trabalhadas o melhor é pelo servidor que não tem como a pessoa manipular o horário.
Olá, diz uma coisa, essa parte de definir o tempo de sessão, tem como o tempo for expirado, ele automaticamente votar para a tela de login? Hoje passo por este problema porque a sessão expira e eu não sei que aconteceu, só fico sabendo quando tento acessar uma aplicação que precisa de uma informação que tem na sessão de logado, e não encontra, aí fico sabendo porque ele não faz o filtro necessário. Lembrando que uso a versão 8.1 do scriptcase, e não pretendo fazer upgrade agora.
Resumindo, acho que nesse caso é melhor usar o horário do servidor, mesmo sabendo que tenho que fazer o controle do timezone. Só não entendi bem essa parte do horário de verão. Aqui não tem horário de verão mas como você disse, outros estados tem, sendo assim, o +date(“I”) vai servir para fazer o que nesse controle de horário de verão?
o date(‘I’) pega 1 se for horário de verão e 0 se não for.
Perfeito cara, obrigado. Utilizei o mesmo exemplo que você me deu, só que já gravando no banco o resultado com o meu timezone, ficou de primeira.
{campo} = time()+ 3600*(-3+date(“I”));
Assim quando eu usar o gmdate(“H:i:s”,$resultDoBanco); já vem pronto.