Um formulário que grava a hora errada, uma encomenda com data de ontem, um agendamento que dispara duas horas mais cedo — quase sempre é a mesma coisa: num servidor não há um relógio, há três, e não têm de estar todos no mesmo fuso.
Os três relógios
| Relógio |
Quem o usa |
| O do sistema |
A hora da máquina. Aparece nos registos do servidor e nas datas dos ficheiros. |
| O do PHP |
O que o seu site usa quando chama date(). É este que manda no seu site, e não tem de coincidir com o do sistema. |
| O da base de dados |
O que o MySQL usa em NOW() e CURRENT_TIMESTAMP. |
|
É aqui que nascem as horas trocadas. Se uma parte do seu site grava a hora com o PHP e outra deixa a base de dados preencher com NOW(), e os dois relógios não estiverem no mesmo fuso, ficam registos com horas diferentes para o mesmo acontecimento. Não dá erro nenhum — só se descobre quando alguém repara que as contas não batem. Se o seu site grava datas, vale a pena confirmar isto antes de precisar delas.
|
Como saber o seu, em dois minutos
Não adivinhe: o valor certo é o da sua conta. Crie um ficheiro chamado hora.php em public_html com estas linhas:
<?php
echo 'PHP: ' . date('Y-m-d H:i:s T') . ' (' . date_default_timezone_get() . ')<br>';
$db = new mysqli('localhost','UTILIZADOR','SENHA','BASE');
echo 'MySQL: ' . $db->query('SELECT NOW()')->fetch_row()[0];
| 2 |
Abra oseudominio.co.mz/hora.php no navegador.
|
|
| 3 |
Compare as duas linhas. Se não baterem certo, é esse o problema que anda a perseguir.
|
|
| 4 |
Apague o ficheiro depois. Ele contém a senha da base de dados — não pode ficar lá.
|
|
Como pôr o seu site na hora que quer
Não precisa de nos pedir nada: cada conta pode escolher a sua, e não afecta ninguém.
| Onde |
Como |
| WordPress |
Em Definições → Geral, escolha a cidade na lista de fusos. O WordPress passa a mostrar tudo nessa hora, independentemente do servidor. É a forma mais simples e cobre a maior parte dos casos. |
| Site em PHP próprio |
Uma linha no início: date_default_timezone_set('Africa/Maputo') — ou a cidade que lhe servir. |
| Todo o domínio de uma vez |
No cPanel, em MultiPHP INI Editor, defina date.timezone para o domínio. Passa a valer para todos os ficheiros PHP dele — ver como mudar a versão do PHP |
| Só numa consulta SQL |
Convertendo na própria consulta, com CONVERT_TZ(). |
|
O fuso certo para estes mercados. Use Africa/Maputo para Moçambique e Africa/Luanda para Angola. Não escreva «UTC+2» nem «UTC+1» à mão: o nome da cidade é melhor porque acompanha sozinho qualquer mudança de regra no futuro. Nenhum dos dois países tem hora de Verão, mas quem tem visitantes na Europa ganha em usar o nome, porque lá a hora muda duas vezes por ano.
|
A hora nos e-mails e nos registos
Duas coisas que não se mudam a partir do site, e é bom saber:
| 1 |
Nas mensagens de e-mail, a hora vai com o fuso indicado no cabeçalho, e cada programa de correio mostra-a convertida para o fuso de quem lê. Por isso a mesma mensagem aparece a horas diferentes em computadores diferentes — e isso está correcto.
|
|
| 2 |
Nos registos do servidor — os que abrimos quando nos pede ajuda — a hora é a do sistema. Quando nos escrever sobre um problema, diga a hora e o fuso em que a viu. Poupa-nos a procurar duas horas ao lado.
|
|
Se precisa de mandar no relógio todo
Num plano partilhado, a hora do sistema é comum a toda a máquina e não se muda por conta — o que se muda é a do PHP e a das consultas, que é o que interessa a 99% dos sites. Se a sua aplicação exige mesmo que o sistema inteiro esteja noutro fuso, isso é um servidor só seu: ver alojamento partilhado ou VPS.
|
As horas do seu site não batem certo? Mostre-nos o exemplo.
Abrir um pedido
|
PRODUTO RECOMENDADO Alojamento de sites com cPanel Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 600,00 MT/mês Ver planos |