Autor Tema: JavaScript calcular el intervalo de tiempo que falta para una fecha CU01167E  (Leído 7083 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas tardes. Con este hilo propondré una posible solución del ejercicio de la entrega CU01167E del curso JavaScript desde cero.

Citar
EJERCICIO

Analiza este código JavaScript y responde a las preguntas:

Código: [Seleccionar]
<!DOCTYPE html>

<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">

<script type="text/javascript">

var target_date = new Date("Jan 1, 2089").getTime();

var days, hours, minutes, seconds;

function ejemplo() {

var countdown = document.getElementById("countdown");

setInterval(function () {

    var current_date = new Date().getTime();

    var seconds_left = (target_date - current_date) / 1000;

    days = parseInt(seconds_left / 86400);

    seconds_left = seconds_left % 86400;

    hours = parseInt(seconds_left / 3600);

    seconds_left = seconds_left % 3600;

    minutes = parseInt(seconds_left / 60);

    seconds = parseInt(seconds_left % 60);

    countdown.innerHTML = 'Para el 1 de enero de 2089 faltan '  +days+ ' días, ' + hours + " horas, "

    + minutes + " minutos, " + seconds + " segundos";

                }, 1000);

}

</script>

</head>

<body onload="ejemplo()" >

<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3>

<span id="countdown"></span></div>
</body></html>

Citar
a) Haz una lista de las variables que intervienen indicando para cada variable cuál es su nombre, cuál es su tipo, cuál es su cometido y si está definida como variable global o variable local.
Ejemplo: la variable target_date es de tipo Date, su cometido es almacenar la fecha futura respecto de la cual el script va a mostrar los días, horas, minutos y segundos que faltan para alcanzar dicha fecha, y está definida como variable global.

1) La variable days es de tipo Number, su cometido es almacenar los días que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.

2) La variable hours es de tipo Number, su cometido es almacenar las horas que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.

3) La variable minutes es de tipo Number, su cometido es almacenar los minutos que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.

4) La variable seconds es de tipo Number, su cometido es almacenar los segundos que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.

5) La variable current_date es de tipo Date, su cometido es almacenar la fecha actual (en milisegundos), y está definida como variable local.

6) La variable seconds_left es de tipo Number, su cometido es almacenar los segundos restantes después de sacar los segundos que forman los días, horas y minutos. El resto son los segundos que quedan hasta la fecha futura. Está definida como variable local.

7) La variable countdown es de tipo Object, su cometido es acceder al elemento span. Está definida como variable global.

Citar
b) ¿Qué ocurre si definimos la variable current_date en el ámbito global en vez de dentro de la función? ¿Por qué ocurre esto?


Si definimos la variable current_date como variable global sólo se almacenará una vez la fecha actual (y el tiempo). De esta manera, al no llamarse continuamente mediante la función setInterval(funcion(){..},1000), no se almacenará cada segundo el tiempo y sólo nos mostrará el tiempo que queda hasta la fecha futura cuando carguemos la página, solamente una vez.

Citar
c) ¿Podríamos definir todas las variables como locales a la función y prescindir de las variables globales? Si se pudiera hacer, ¿crees que sería positivo para el diseño del código, su mantenimiento y ampliabilidad, o por el contrario, que sería negativo?

Sí se pondrán definir todas las variables como locales. Normalmente, en programación, cada función tiene su cometido y si definimos todas las variables como locales la función hará dos cometidos a la vez. Lo negativo sería que cargaremos mucho la memoria del compilador, porque cada vez que se invoque la función creará las variables, cuando podemos prescindir de ello y las variables que no se tengan que cambiar definirlas como globales.

Citar
d) ¿Qué métodos de los empleados en el código devuelven valores en milisegundos?

Los métodos que devuelven los valores en milisegundos son: .getTime(). Tanto en la variable global target_date como en la variable local current_date.

Gracias.
« Última modificación: 07 de Abril 2016, 13:35 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! En general bien

Aspectos a tener en cuenta:

Esto no se entiende: si definimos todas las variables como locales la función hará dos cometidos a la vez.

Esto no es correcto: Lo negativo sería que cargaremos mucho la memoria del compilador. Con JavaScript no tenemos un compilador, tenemos un intérprete que es el propio navegador. JavaScript no es un lenguaje compilado, sino interpretado. Puede encontrarse información en internet sobre esto.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenos días, César.

Gracias por corregir el ejercicio.

Tienes razón, es un lenguaje interpretado, no compilado. Quería decir que está consumiendo muchos recursos de la memoría del navegador.

Sobre que una función hace dos cometidos, quería decir que normalmente en programación cada función tiene su objetivo, meta, cometido. Cuando hacemos un código, habitualmente, intentamos que cada función tenga su objetivo, para así, después poder reutilizarse el código de dicha función si lo necesitamos. Si una función hace dos o más objetivos, posteriormente es difícil que necesitemos en otro caso justo estos dos objetivos. Por lo tanto, es mejor cada función con un cometido.

Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".