View Full Version : Comparação de Datas [javascript + php]


ReVenG3r
10-03-2008, 17:05
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:

http://img174.imageshack.us/img174/2950/51485369ld7.jpg

Onde a data é-me procurada aqui:

<?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

http://img254.imageshack.us/img254/6990/68397878nq5.jpg

O que aparece aí como "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 :)

anjo2
10-03-2008, 17:16
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ê?

slack_guy
10-03-2008, 19:02
Seria qualquer coisa assim:

<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>

opsis
10-03-2008, 20:16
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.

slack_guy
10-03-2008, 20:26
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.

anjo2
10-03-2008, 21:06
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.

slack_guy
10-03-2008, 21:59
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. :-)

anjo2
10-03-2008, 22:04
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.

ReVenG3r
12-03-2008, 10:29
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 :/

slack_guy
12-03-2008, 10:55
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?

Tsunamy_boy
12-03-2008, 18:19
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