JavaScript - Resta de varias fechas

 
Vista:
sin imagen de perfil

Resta de varias fechas

Publicado por programa (4 intervenciones) el 03/03/2015 18:45:50
Hola a tod@s:

Estoy intentando programar una aplicación que me muestre el tiempo que hace que no hago ciertas cosas. Por ejemplo:

¿Cuánto hace que no como? 00 años : 00 días : 04 horas : 15 minutos : 45 segundos
¿Cuánto hace que no voy al cine? 00 años : 06 días : 14 horas : 37 minutos : 22 segundos
¿Cuánto hace que no viajo? 00 años : 233 días : 19 horas : 02 minutos : 03 segundos

Básicamente, sería una resta de fechas. Yo lo he programado así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<html>
<head>
<title>Título de la página</title>
<script type="text/javascript">
   function restarFechas(){
      var hoy=new Date();
      var fechaActual=new Date(hoy.getFullYear()+"/"+(hoy.getMonth()+1)+"/"+hoy.getDate()+" "+hoy.getHours()+":"+hoy.getMinutes()+":"+hoy.getSeconds());
      var fecha=new Date("2014/4/2 10:30:00");
      var restaFechas=(fechaActual-fecha)/1000;
      var years=0;
      var dias=0;
      var horas=0;
      var minutos=0;
      var segundos=0;
      while(restaFechas>0){
         if(restaFechas>=31536000){
            years=parseInt(restaFechas/31536000);
            restaFechas=restaFechas-years*31536000;
         }else if(restaFechas>=86400){
            dias=parseInt(restaFechas/86400);
            restaFechas=restaFechas-dias*86400;
         }else if(restaFechas>=3600){
            horas=parseInt(restaFechas/3600);
            restaFechas=restaFechas-horas*3600;
         }else if(restaFechas>=60){
            minutos=parseInt(restaFechas/60);
            restaFechas=restaFechas-minutos*60;
         }else{
            segundos=restaFechas;
            restaFechas=0;
         }
      }
      years=dobleDigito(years);
      dias=dobleDigito(dias);
      horas=dobleDigito(horas);
      minutos=dobleDigito(minutos);
      segundos=dobleDigito(segundos);
      document.getElementById('displayReloj').innerHTML=years+" años : "+dias+" días : "+horas+" horas : "+minutos+" minutos : "+segundos+" segundos";
      var t = setTimeout(function(){restarFechas()},1000);
   }
   function dobleDigito(i) {
      if(i<10){
         i="0"+i; // Añadir el cero en números menores de 10
      }
      return i;
   }
</script>
</head>
<body onload="restarFechas()">
<div id ="displayReloj"></div>
</body>
</html>

pero sólo me aparece una fila (con una fecha) y me gustaría que apareciesen varias filas (cada una con su fecha distinta), espero haberme explicado bien.

¿Cómo podría hacerlo?

Gracias por vuestra ayuda ;)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.162
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Resta de varias fechas

Publicado por xve (2100 intervenciones) el 04/03/2015 07:49:24
Hola, la manera que yo haría, seria llamar a la función pasando como parámetro la fecha y div de respuesta, de esta manera podrás utilizarlo para tantos cálculos como quieras...

Aquí te adjunto como lo he solucionado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Título de la página</title>
    <script type="text/javascript">
        function restarFechas(idResult,fechaCalcular){
            var hoy=new Date();
            var fechaActual=new Date(hoy.getFullYear()+"/"+(hoy.getMonth()+1)+"/"+hoy.getDate()+" "+hoy.getHours()+":"+hoy.getMinutes()+":"+hoy.getSeconds());
            var fecha=new Date(fechaCalcular);
            var restaFechas=(fechaActual-fecha)/1000;
            var years=0;
            var dias=0;
            var horas=0;
            var minutos=0;
            var segundos=0;
            while(restaFechas>0){
                if(restaFechas>=31536000){
                    years=parseInt(restaFechas/31536000);
                    restaFechas=restaFechas-years*31536000;
                }else if(restaFechas>=86400){
                    dias=parseInt(restaFechas/86400);
                    restaFechas=restaFechas-dias*86400;
                }else if(restaFechas>=3600){
                    horas=parseInt(restaFechas/3600);
                    restaFechas=restaFechas-horas*3600;
                }else if(restaFechas>=60){
                    minutos=parseInt(restaFechas/60);
                    restaFechas=restaFechas-minutos*60;
                }else{
                    segundos=restaFechas;
                    restaFechas=0;
                }
            }
            years=dobleDigito(years);
            dias=dobleDigito(dias);
            horas=dobleDigito(horas);
            minutos=dobleDigito(minutos);
            segundos=dobleDigito(segundos);
            document.getElementById(idResult).innerHTML=years+" años : "+dias+" días : "+horas+" horas : "+minutos+" minutos : "+segundos+" segundos";
            var t = setTimeout(function(){restarFechas(idResult,fechaCalcular)},1000);
        }
        function dobleDigito(i) {
            if(i<10){
                i="0"+i; // Añadir el cero en números menores de 10
            }
            return i;
        }
 
        window.onload=function(){
            restarFechas("displayReloj1","2014/4/2 10:30:00");
            restarFechas("displayReloj2","2015/1/1 10:00:00");
        }
    </script>
</head>
<body>
    <div id="displayReloj1"></div>
    <div id="displayReloj2"></div>
</body>
</html>

Coméntanos que te parece, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Resta de varias fechas

Publicado por programa (4 intervenciones) el 04/03/2015 10:07:24
Muchas gracias, el resultado queda perfecto (tal y como quería que quedase).
Voy a estudiar el código para llegar a entenderlo perfectamente. Un saludo ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar