Foros del Web » Programando para Internet » Javascript »

Cuenta regresiva en javascript

Estas en el tema de Cuenta regresiva en javascript en el foro de Javascript en Foros del Web. Hola a todos. tengo este codigo que funciona perfecto en IE pero no en chrome ni en firefox. alguien tiene alguna sugerencia para que corra ...
  #1 (permalink)  
Antiguo 02/09/2010, 14:53
Avatar de Lophophora  
Fecha de Ingreso: mayo-2005
Mensajes: 366
Antigüedad: 18 años, 10 meses
Puntos: 0
Cuenta regresiva en javascript

Hola a todos.

tengo este codigo que funciona perfecto en IE pero no en chrome ni en firefox.

alguien tiene alguna sugerencia para que corra en los otros navegadores?

GRacias

Lophophora

Código PHP:
<script type="text/javascript" 
function 
countdown_clock()
         {
         
year=2011;
         
month=01;
         
day=29;
         
hour=22;
         
minute=00;
         
Today = new Date();
         
Todays_Year Today.getYear() - 2000;
         
Todays_Month Today.getMonth() + 1;
         
                  
         
//Computes the time difference between the client computer and the server.
         
Server_Date = (new Date(1092,
                                 
155019)).getTime();
         
Todays_Date = (new Date(Todays_YearTodays_MonthToday.getDate(),
                                 
Today.getHours(), Today.getMinutes(), Today.getSeconds())).getTime();
         
         
countdown(yearmonthdayhourminute, (Todays_Date Server_Date));                
         }
         
function 
countdown(yearmonthdayhourminutetime_difference)
         {
         
Today = new Date();
         
Todays_Year Today.getYear();
         
Todays_Month Today.getMonth() + 1;
         
format=1;
                                             
         
//Convert today's date and the target date into miliseconds.
         
         
Todays_Date = (new Date(Todays_YearTodays_MonthToday.getDate(),
                                 
Today.getHours(), Today.getMinutes(), Today.getSeconds())).getTime();
         
Target_Date = (new Date(yearmonthdayhourminute00)).getTime();
         
         
//Find their difference, and convert that into seconds.
         //Taking into account the time differential between the client computer and the server.
         
Time_Left Math.round((Target_Date Todays_Date time_difference) / 1000);
         
         if(
Time_Left 0){
            
Time_Left 0;
         }
         
         switch(
format)
               {
               case 
0:
                    
//The simplest way to display the time left.
                    
document.all.countdown.innerHTML Time_Left ' segundos';
                    break;
               case 
1:
                    
//More datailed.
                    
days Math.floor(Time_Left / (60 60 24));
                    
Time_Left %= (60 60 24);
                    
hours Math.floor(Time_Left / (60 60));
                    
Time_Left %= (60 60);
                    
minutes Math.floor(Time_Left 60);
                    
Time_Left %= 60;
                    
seconds Time_Left;
                    
                    
dps 's'hps 's'mps 's'sps 's';
                    
//ps is short for plural suffix.
                    
if(days == 1dps ='';
                    if(
hours == 1hps ='';
                    if(
minutes == 1mps ='';
                    if(
seconds == 1sps ='';
                    
                    
document.all.countdown.innerHTML days ' dia' dps ' ';
                    
document.all.countdown.innerHTML += hours ' hora' hps ' ';
                    
document.all.countdown.innerHTML += minutes ' minuto' mps ' y ';
                    
document.all.countdown.innerHTML += seconds ' segundo' sps;
                    break;
               default: 
                    
document.all.countdown.innerHTML Time_Left ' segundos';
               }
               
         
//Recursive call, keeps the clock ticking.
         
setTimeout('countdown(' year ',' month ',' day ',' hour ',' minute ',' 
                     
time_difference ');'1000);
         }
</script> 
__________________
P.L.U.R.
  #2 (permalink)  
Antiguo 02/09/2010, 18:15
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Cuenta regresiva en javascript

javascript no obtiene la hora del servidor (lo digo por la variable server_date), sino del cliente, a menos que uses ajax para pedirla

algo que me inquieta es que no declararas las variables con var, porque sin eso no funcionaria en IE, ¿a menos que las declararas de forma global, fuera de las funciones?

pero el error principal está en las lineas similares a:

document.all.countdown.innerHTML ... //esto es solo compatible en IE y algunos navegadores

tendrás que cambiarlo por:

document.getElementById('id_countdown').innerHTML ... //si countdown tiene id="id_countdown"
  #3 (permalink)  
Antiguo 03/09/2010, 09:25
Avatar de Lophophora  
Fecha de Ingreso: mayo-2005
Mensajes: 366
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: Cuenta regresiva en javascript

Muchas gracias por responder.

El codigo del lado del servidor es el siguiente donde mediante PHP obtiene la hora del servidor.
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Cuenta Regresiva</title>
<script type="text/javascript" >
function countdown_clock()
         {
     year=2011;
     month=01;
     day=29;
     hour=22;
     minute=00;
         Today = new Date();
         Todays_Year = Today.getYear() - 2000;
         Todays_Month = Today.getMonth() + 1;
         
         <?
         $date 
getDate();         
         
$second $date["seconds"];
         
$minute $date["minutes"];
         
$hour $date["hours"];
         
$day $date["mday"];
         
$month $date["mon"];
         
$month_name $date["month"];
         
$year $date["year"];
         
?>
         
         //Computes the time difference between the client computer and the server.
         Server_Date = (new Date(<?= $year 2000 ?><?= $month ?><?= $day ?>,
                                 <?= $hour ?><?= $minute ?><?= $second ?>)).getTime();
         Todays_Date = (new Date(Todays_Year, Todays_Month, Today.getDate(),
                                 Today.getHours(), Today.getMinutes(), Today.getSeconds())).getTime();
         
         countdown(year, month, day, hour, minute, (Todays_Date - Server_Date));                
         }
         
function countdown(year, month, day, hour, minute, time_difference)
         {
         Today = new Date();
         Todays_Year = Today.getYear();
         Todays_Month = Today.getMonth() + 1;
         format=1;
                                             
         //Convert today's date and the target date into miliseconds.
         
         Todays_Date = (new Date(Todays_Year, Todays_Month, Today.getDate(),
                                 Today.getHours(), Today.getMinutes(), Today.getSeconds())).getTime();
         Target_Date = (new Date(year, month, day, hour, minute, 00)).getTime();
         
         //Find their difference, and convert that into seconds.
         //Taking into account the time differential between the client computer and the server.
         Time_Left = Math.round((Target_Date - Todays_Date + time_difference) / 1000);
         
         if(Time_Left < 0){
            Time_Left = 0;
         }
         
         switch(format)
               {
               case 0:
                    //The simplest way to display the time left.
                    document.all.countdown.innerHTML = Time_Left + ' segundos';
                    break;
               case 1:
                    //More datailed.
                    days = Math.floor(Time_Left / (60 * 60 * 24));
                    Time_Left %= (60 * 60 * 24);
                    hours = Math.floor(Time_Left / (60 * 60));
                    Time_Left %= (60 * 60);
                    minutes = Math.floor(Time_Left / 60);
                    Time_Left %= 60;
                    seconds = Time_Left;
                    
                    dps = 's'; hps = 's'; mps = 's'; sps = 's';
                    //ps is short for plural suffix.
                    if(days == 1) dps ='';
                    if(hours == 1) hps ='';
                    if(minutes == 1) mps ='';
                    if(seconds == 1) sps ='';
                    
                    document.getElementById('countdown').innerHTML = days + ' dia' + dps + ' ';
                    document.getElementById('countdown').innerHTML += hours + ' hora' + hps + ' ';
                    document.getElementById('countdown').innerHTML += minutes + ' minuto' + mps + ' y ';
                    document.getElementById('countdown').innerHTML += seconds + ' segundo' + sps;
                    break;
               default: 
                    document.all.countdown.innerHTML = Time_Left + ' segundos';
               }
               
         //Recursive call, keeps the clock ticking.
         setTimeout('countdown(' + year + ',' + month + ',' + day + ',' + hour + ',' + minute + ',' + 
                     time_difference + ');', 1000);
         }
</script>
<style type="text/css">
<!--
.style1 {font-size: 36px}
-->
</style>
</head>
<body onload="countdown_clock();">
<div align="center" class="style1">
<div id="countdown"></div>
</div>
</body>
</html>
El codigo que habia copiado es la version ya del lado del cliente, pero bueno, una disculpa por eso.

Hice el cambio que me comentas y sigue sin funcionar, alguna idea?


Lophophora
__________________
P.L.U.R.

Última edición por Lophophora; 03/09/2010 a las 09:30

Etiquetas: regresiva
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:05.