Autor Tema: JavaScript calcular el tiempo transcurrido entre dos clicks del usuario CU01163E  (Leído 2474 veces)

Reinier Garcia

  • Sin experiencia
  • *
  • Mensajes: 9
  • Y el último que apague el Morro!
    • Ver Perfil
    • Perfil en LinkedIn
Respuesta del Ejercicio # 1 del Capítulo 63 del tutorial básico de programación web con JavaScript:

Código: [Seleccionar]
/* Capítulo 63: Ejercicio 1 */

function Cap63Ejercicio1CalcularLapsoDeTiempo() {
   
    var nombre = prompt('Teclee su nombre');

    if ((!nombre) || (nombre.trim().length === 0)) {

        while (nombre.trim() === '') {

            nombre = prompt('Teclee su nombre');

        }

    }

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

    var pais = prompt('Introduzca su país');

    if ((!pais) || (pais.trim().length === 0)) {

        while (pais.trim() === '') {

            pais = prompt('Teclee su país');

        }

    }

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

    var cantidadMilisegundos = tiempo2 - tiempo1;

    /*----------------------------------------------------------------------------------------------------------------------
     -->  Ahora doy el resultado de acuerdo a la cantidad de milisegundos calculados entre las dos entradas de datos  <-- 
     ---------------------------------------------------------------------------------------------------------------------*/

    if (cantidadMilisegundos < 1000) { //Menos de un segundo

        alert('Han pasado ' + cantidadMilisegundos + ' milisegundos entre su primera y segunda respuesta');

    } else if (cantidadMilisegundos === 1000) { // Un segundo

        alert('Ha pasado 1 segundo entre su primera y segunda respuesta');

    } else if ((1000 < cantidadMilisegundos) && (cantidadMilisegundos < 60000)) { // Más de 1 segundo y menos de 1 minuto

        alert('Han pasado aproximadamente ' + (cantidadMilisegundos / 1000).toFixed(0) + ' segundos entre su primera y segunda respuesta');

    } else if (cantidadMilisegundos === 60000) { // Un minuto exacto

        alert('Ha pasado 1 minuto entre su primera y segunda respuesta');

    } else if ((60000 < cantidadMilisegundos) && (cantidadMilisegundos < 3600000)) { // Más de 1 minuto y menos de 1 hora

        /* Se valida para cuando son minutos exactos (sin segundos) o cuando son inexactos (con segundos restantes) */
        if (cantidadMilisegundos % 60000 === 0) { // Minutos exactos (sin segundos restantes)

            alert('Han pasado aproximadamente ' + (cantidadMilisegundos / 60000).toFixed(0) + ' minutos entre su primera y segunda respuesta');

        } else { // Minutos inexactos (con segundos restantes)

            alert('Han pasado aproximadamente ' + (cantidadMilisegundos / 60000).toFixed(0) + ' minutos y ' + Number((cantidadMilisegundos % 60000) / 1000).toFixed(0) + ' segundos entre su primera y segunda respuesta');
        }

    } else if (cantidadMilisegundos === 3600000) { // 1 hora exactactamente

        alert('Ha pasado 1 hora exactamente entre su primera y segunda respuesta');

    } else if ((360000 < cantidadMilisegundos) && (cantidadMilisegundos < 86400000)) { // Más de 1 hora y menos de 1 día

        /* Se debe validar para cuando son horas en punto o exactas (sin minutos y/o segundos) o cuando son horas inexactas (con minutos y/o segundos restantes) */

        if (cantidadMilisegundos % 86400000 === 0) { // Horas exactas (en punto)

            alert('Han pasado  ' + (cantidadMilisegundos / 86400000).toFixed(0) + ' horas entre su primera y segunda respuesta');

        } else if (cantidadMilisegundos % 86400000 !== 0) { // Horas inexactas (lo más común al ejecutarlo durante largo tiempo)

            /* Ahora debe validarse si son horas inexactas con minutos en punto o horas inexactas con minutos + segundos restantes */
            if ((cantidadMilisegundos % 86400000) % 60000 === 0) { // Horas inexactas con minutos en punto

                alert('Han pasado  ' + (cantidadMilisegundos / 86400000).toFixed(0) + ' horas y ' + Number((cantidadMilisegundos % 86400000) / 60000).toFixed() + ' minutos entre su primera y segunda respuesta');


            } else if ((cantidadMilisegundos % 86400000) % 60000 !== 0) { // Horas inexactas con minutos + segundos restantes (lo más común en periodos largos)

                alert('Han pasado  ' + (cantidadMilisegundos / 86400000).toFixed(0) + ' horas, ' + Number((cantidadMilisegundos % 86400000) / 60000).toFixed(0) + ' minutos y ' + Number(((cantidadMilisegundos % 86400000) % 60000) / 1000).toFixed(0) + ' segundos entre su primera y segunda respuesta');

            }

        }

    } else if (cantidadMilisegundos === 86400000) { // 1 día exactamente

        alert('Ha pasado 1 día exactamente entre su primera y segunda respuesta');
    }


}
« Última modificación: 19 de Marzo 2017, 21:35 por Ogramar »

Reinier Garcia

  • Sin experiencia
  • *
  • Mensajes: 9
  • Y el último que apague el Morro!
    • Ver Perfil
    • Perfil en LinkedIn

Respuesta del Ejercicio # 2 del Capítulo 63:

Código: [Seleccionar]
/*----------------------------------------------------------------------------------------------------------------------
 -->  Capítulo 63: Ejercicio 2  <-- 
 ---------------------------------------------------------------------------------------------------------------------*/

function Cap63Ejercicio2CalcularDiasEntreDosFechas() {

    /* Recibimos la 1ra fecha en formato español (dd-mm-yyyy) */
    var fechaInicial = prompt('Teclee la 1ra fecha (dd-mm-yyyy)');

    /* Garantizamos que el usuario teclee la 1ra fecha y que lo haga correctamente */
    while ((!fechaInicial) || (fechaInicial.trim().length === 0) || (!verificarFecha(fechaInicial))) {

        fechaInicial = prompt('Teclee bien la 1ra fecha (dd-mm-yyyy)');
    }

    /* Recibimos la 2da fecha en formato español (dd-mm-yyyy) */
    var fechaFinal = prompt('Teclee la 2da fecha (dd-mm-yyyy)');

    /* Garantizamos que el usuario teclee la 2da fecha y que lo haga correctamente */
    while ((!fechaFinal) || (fechaFinal.trim().length === 0) || (!verificarFecha(fechaFinal))) {

        fechaFinal = prompt('Teclee bien la 2da fecha (dd-mm-yyyy)');
    }

    /* Declaro una variable auxiliar necesaria para dar el resultado al usuario */
    var resultado = "";

    /* Divido en dos arreglos los datos de día, més y año de las dos fechas, que están separados por el caracter "-" */
    var inicial = fechaInicial.split("-");
    var final = fechaFinal.split("-");

    // Obtenemos las dos fechas en milisegundos
    var dateStart = new Date(inicial[2], (inicial[1] - 1), inicial[0]);
    var dateEnd = new Date(final[2], (final[1] - 1), final[0]);

    /* Comparamos las dos fechas y de acuerdo a ello es la respuesta que se le dará al usuario */
    if (dateStart < dateEnd) { // Todo correcto

        // la diferencia entre las dos fechas la dividimos entre 86 400 000, que es la cantidad de ms que tiene un día
        resultado = "La diferencia es de " + Number((dateEnd - dateStart) / 86400000).toFixed(0) + " días";

    } else if (dateStart === dateEnd) { // La misma fecha introducida dos veces

        resultado = "La fecha inicial es igual a la fecha final (0 días de diferencia)";

    } else { // El usuario se equivocó, intercambiando el orden de las fechas (igualmente doy la respuesta)

        // la diferencia entre las dos fechas la dividimos entre 86 400 000, que es la cantidad de ms que tiene un día
        resultado = "La fecha inicial es posterior a la fecha final \ny la diferencia entre ellas es de " + Number((dateStart - dateEnd) / 86400000).toFixed(0) + " días";
    }

    /* Muestro el resultado, sea este cual sea */
    alert(resultado);

}

/* función para validar una fecha */
function isValidDate(aDay, aMonth, aYear) {

    /* El mes en las fechas comienza en índice 0, por lo que se debe reducir en 1 el mes entrante a esta función */
    var month = aMonth - 1;

    /* Creo una fecha temporal para comprobar con sus funciones la validés de la fecha entrante a esta función */
    var dteDate = new Date(aYear, month, aDay);

    /* Devuelve si es válida o no (No puede usarse === pues no son del mismo formato y valor las variables a comparar) */
    return ((aDay == dteDate.getDate()) && (month == dteDate.getMonth()) && (aYear == dteDate.getFullYear()));

}

/* Función para varificar una fecha en formato español (dd-mm-yyyy), tanto por su formato como por su validés como tal */
function verificarFecha(aFecha) {

    /* Por si queremos utilizar el caracter "/" para separar las cifras de la fecha en formato español (dd/mm/yyyy) */
    //  var patron = new RegExp("^([0-9]{1,2})([/])([0-9]{1,2})([/])(19|20)+([0-9]{2})$");

    /* Creamos la expresión regular que describe la fecha en formato español (dd-mm-yyyy) */
    var patron = new RegExp("^([0-9]{1,2})([-])([0-9]{1,2})([-])(19|20)+([0-9]{2})$");

    /* Ahora varifico si el formato en que está escrito la fecha es el correcto */
    if (aFecha.search(patron) === 0) { // Cumple el formato

        /* Divido en un arreglo las partes integrantes de la fecha (año, mes, día), que están separadas por el caracterer "-" */
        var values = aFecha.split("-");

        /* Por último verifico que la fecha sea real (válida) enviando a otra función el día, mes y año */
        if (isValidDate(values[0], values[1], values[2])) { // Si es válida

            return true;

        }
    }

    /* Si no cumple con ambas condiciones (con un formato correcto y con que sea válida) devuelvo false */
    return false;

}

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola Reinier Garcia.

Si lo que quieres es que alguien corrija tus ejercicios hazlo creando un nuevo hilo (nuevo tema). No respondas sobre hilos ya existentes (a no ser que quieras intervenir específicamente para indicar algo concreto de ese hilo).

Para ponerlo más fácil a los colaboradores que quieran ayudarte, intenta pegar el script junto con un documento html.

https://www.aprenderaprogramar.com/foros/index.php?topic=1460.msg7784#msg7784

Saludos.  ;D
« Última modificación: 23 de Enero 2017, 16:01 por pedro,, »

 

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