Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
km92

Contador de 2 em 2 horas

Recommended Posts

km92

Boas pessoal.

Tenho um blog onde é adicionado conteúdo exactamente às 00:00, 02:00, 04:00, 06:00... e por aí fora.

Tenho um plugin que faz isto automaticamente, ou seja, de 2 em 2 horas adiciona conteúdo (neste caso vídeos).

Para tornar o site um pouco mais amigável queria colocar nalgum sítio do site uma mensagem a informar quanto tempo falta para o site ser actualizado.

Já pesquisei por vários scripts mas nenhum fez o que eu quero.

Alguém me pode ajudar nisto? O formato que quero é algo deste género: "Tempo restante para a próxima actualização: 1 hora, 23 minutos, 40 segundos" e assim que chega a 0 recomeçar novamente.

Desde já muito obrigado  😳

Share this post


Link to post
Share on other sites
pwseo

km92,

Uma vez que os teus visitantes podem vir de qualquer lado do mundo, fazer um simples contador decrescente não é suficiente. Isto acontece porque como o Javascript é executado do lado do cliente, as horas utilizadas são as do lado do cliente.

Ou seja, se tu disseres que o conteúdo vai ser lançado às duas da manhã, no lado do cliente podem já ser 3h da manhã, e isso daria erro. Uma solução é utilizares medidas de tempo UTC...

Outra solução é, via php, enviares com cada refresh da página o número de segundos restantes até à próxima actualização. Desta forma, o tempo utilizado seria o do teu servidor, e nunca haveria erro.

EDIT:

Para actualizares o contador, investiga a sintaxe da função setInterval, e o resto é apenas uma simples conversão de segundos num formato legível (3600s = 1h).

Share this post


Link to post
Share on other sites
km92

A actualização é feita via Cron job, como faço então isso do php? Não me podem dar umas luzes? 😳

Share this post


Link to post
Share on other sites
pwseo

No php tens funções para saber a hora actual, certo? Pronto, tens que fazer um script que calcule o número de segundos que faltam desde "agora" até ao próximo update.

$nextupdate = mktime( /* tens que ver a sintaxe desta função e definir aqui a hora do próximo update */ );
$now = $time();

$remaining = $nextuptime - $now;

E depois imprimes essa variável no javascript da página... E utilizando javascript fazes um countdown como esse número de segundos (que é quanto falta para o próximo update).

EDIT: tens que ter em atenção que cada vez que chamas mktime() tens que te certificar que sabes a hora actual para saberes a próxima hora de update... Ou seja, se os updates forem de 2 em 2h, e o último update tiver sido à meia noite e forem agora 1h da manhã, o próximo update é às 2h da manhã... Mas se já forem 2h05, o próximo update é às 4h. Tens que desenhar uma função que tenha isso em conta :)

Share this post


Link to post
Share on other sites
km92

Agradeço imenso a ajuda, mas não percebo nada de php :x

Vou tentar pesquisar um pouco para ver se consigo mais alguma coisa :\

Mas muito obrigado pela ajuda :D

Share this post


Link to post
Share on other sites
pwseo

Tenta fazer por ti... Ganhar experiência em php não te faz mal nenhum e vai dar-te muito jeito para outras coisas.

Vai dizendo como vai isso entretanto para te podermos ajudar sem te dizer tudo ;)

Uma dica... Se o cronjob correr a horas pares (0, 2, 4, 6, etc), para saberes a hora do próximo update é preciso apenas saber se a hora actual é par ou não. Se for par, a hora do próximo update é essa + 2. Se for impar, é essa + 1.

Share this post


Link to post
Share on other sites
pwseo

Outra coisa... se não te sentires bem com php mas não tiveres problema com Javascript podes fazer isto em Javascript também. Apenas tens que saber qual a timezone do teu servidor e fazer continhas com datas via Javascript.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.