Respuesta del Ejercicio # 2 del Capítulo 63:
/*----------------------------------------------------------------------------------------------------------------------
 -->  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;
}