Comparação de Datas [javascript + php]

ReVenG3r

Membro
Boas...cá estou eu de novo!!!

O meu problema é o seguinte:

Tenho uma tabela em php denominada "evento" que contem os campos (dia, mes, ano, etc)!

Quando insiro um evento, ele insere-me na BD os campos dia mes ano e de seguida faz-me uma procura aparecendo +/- o que se segue:

51485369ld7.jpg


Onde a data é-me procurada aqui:

[SIZE=-1]<?php
$ligax = mysqli_connect('localhost', 'root','');
if (!$ligax){echo "<p> Falha na ligação."; exit; }
mysqli_select_db($ligax, 'jfgrijo');
$eventos = "Select * From evento";
$result = mysqli_query($ligax, $eventos);
$nregistos = mysqli_num_rows($result);
if($nregistos==0){
echo "Sem Eventos";
}
//echo '<font face="verdana" size="-1">'."Nº de registos encontrados: $nregistos";
for ($i=0; $i <$nregistos; $i++) {
$registo = mysqli_fetch_assoc($result);
?>
<div align="left"><font face="verdana" size="-2">- <?php echo $registo['titulo']; ?>:</font><br> <font face="verdana" size="-2" color="#666666">[<?php echo $registo['dia'];?>-<?php echo $registo['mes'];?>-<?php echo $registo['ano'];?>]</font> - <font face="verdana" size="-2" color="#666666">[<font face="verdana" size="-2" color="#CC0000"><?php echo $registo['hora'];?></font>:<font face="verdana" size="-2" color="#CC0000"><?php echo $registo['min'];?></font>]</font> </div>
<br


68397878nq5.jpg

[/SIZE]

O que aparece aí como "[SIZE=-1]Evento já ultrapassado" refere-se a estas linhas de código e são mera experiência:

<?php
echo "
<script language=JavaScript>
a=new Date();
var dia=a.getDate();
if (dia<10)
dia='0'+dia;
var mes=a.getMonth();
mes=mes+1;
if (mes<10)
mes='0'+mes;
var ano=a.getFullYear();

if (dia>".$registo['dia']." )
{document.write('<b>Evento já ultrapassado</b>');}

</script>
"
?>
Alguma ideia sobre como comparar a data do dia de hoje com a data que é inserida por dia, mês, ano, na base de dados aquando da criação de um novo evento??? :/

Abraços e obrigado :)
[/SIZE]
 
Última edição:
O javascript é client-side, o php é server-side, por isso se houver comparações, tem de ser pelo cliente e não pelo servidor.

Precisas mesmo de ir buscar a data do cliente? Para quê?
 
Seria qualquer coisa assim:
Código:
<script type='text/javascript'>

   var data_server = '20080309'; // valor escrito em PHP

   if ( CompData(data_server) < 0 ) {
       document.write('Evento já ultrapassado');
   }

   function CompData(data) {

       var data_temp = new Date();
       var dia = data_temp.getDate();
       var mes = data_temp.getMonth() + 1;
       var ano = data_temp.getFullYear();
       var data_local = ano + PadDigits(mes) + PadDigits(dia);

       if ( data < data_local ) return -1; // data anterior
       if ( data == data_local ) return 0; // data igual
       if ( data > data_local ) return 1;  // data posterior

   }

   function PadDigits(n) {

       n = n.toString();
       var pd = '';
       if (2 > n.length) { 
           for (i=0; i < (2 - n.length); i++) { 
               pd += '0'; 
           } 
       } 
       return pd + n.toString();
   } 

</script>
 
Concordo com o anjo2. Acho que seria mais acertado fazer isso tudo em PHP, uma vez que a data do cliente pode não estar sequer sincronizada com a do servidor.
 
Precisamente por essa razão é que deveria trabalhar - neste caso em concreto - no lado do cliente.

Errado, então o cliente tem o relógio mal, o site iria dizer que ainda não tinha acontecido?

Um evento às 15h GMT, não é o mesmo que 15h GMT+1, se o relogio do servidor estiver em GMT, ou mesmo que não esteja, dá para mudar.
 
Um evento às 15h GMT, não é o mesmo que 15h GMT+1, se o relogio do servidor estiver em GMT, ou mesmo que não esteja, dá para mudar.
Isso tanto é verdadeiro para o lado do cliente como para o lado do servidor. Se o servidor tiver o relógio atrasado/adiantado o disparate é exactamente o mesmo (e olha que já vi servidores com relógios atrasados).

Além disso, o problema é maior do que aparenta. O que acontece é que o ReVenG3r não colocou as cartas todas em cima da mesa, e portanto é (para mim) complicado sugerir-lhe o que quer que seja a não ser responder exactamente à questão dele: como comparar a data do servidor com a data do cliente.

Se me perguntassem se eu alguma vez faria isso... não, porque o problema que ele quer resolver - dependendo da aplicação -, não se resolve desta forma. Mas não foi essa a questão. :-)
 
Tu no lado do servidor podes acertar as horas na variável que tiveres. Este não deve andar sempre a mudar, já do lado do cliente é uma incógnita.
 
O javascript é client-side, o php é server-side, por isso se houver comparações, tem de ser pelo cliente e não pelo servidor.

Precisas mesmo de ir buscar a data do cliente? Para quê?

O objectivo é ele não me permitir ver o conteudo de determinado evento quando a sua data é passada!!!

Claro que esse evento estará com uma data registada na minha base de dados...ou não a conseguiria ir buscar :P

A minha grande duvida é como fazer para comparar ESSA data (inserida na BD como a "data em que ocorre um evento", onde contem os campos dia, mes, ano) com a data que vou buscar do lado do cliente!!!

Claro que existirão complicações caso a data do lado do cliente esteja errada ou raio que a valha...mas o que eu queria saber é se haverá metodo para fazer isso pois foi isso que me foi pedido para fazer!

Se não der por esse metodo...que metodo devo entao utilizar?

Abraços e desculpem a demora :/
 
A minha grande duvida é como fazer para comparar ESSA data (inserida na BD como a "data em que ocorre um evento", onde contem os campos dia, mes, ano) com a data que vou buscar do lado do cliente!!!
deves estar a brincar.... já te deixei o código escrito.. é só copiar e colar.... do que é que estás à espera?
 
se criares duas datas e as subtraires penso k funka!
caso contrario pegas no codigo javascript acima e fazes um <? echo $data_sistema ?> e um <? echo $data_nova_data ?> nos sitios certos, (num colas a data do servidor e no outro colas a data que pretendes, k o javascript faz o calculo)....
agora se queres saber os comandos para a data de sistema em PHP é procurar meu amigo....
manda-me uma msg s me lembrar trago uma cena k t da as horas de diferença entre duas datas, caso queiras os dias ou os meses é so mecher em valores numericos depois...
abraço
 
Última edição:
Back
Topo