El el post de hoy, vamos a practicar un poco JavaScript. En el ejercicio a realizar vamos a escribir un programa que pida al usuario su fecha de nacimiento (o cualquier otra fecha) en formato dd/mm/aaaa y que muestre como resultado el número de días transcurridos entre ambas fechas.
Para terminar de complicar un poco el ejercicio habrá que usar los métodos del objeto Date().
Primero haré el ejercicio sin un control estricto de la fecha. En el segundo mediante un patrón, controlaremos que el formato de la fecha que el usuario ingresa es correcto. En caso de que lo sea, mostraremos un mensaje de error.
Bueno, explicado el programa … vamos a ello …
Ahora voy a solucionar un error que un usuario me ha comentado. Resulta que el código que se muestra anteriormente en este post no correspondía con el texto del enunciado. Ahora si va el código JavaScript con el que indicando una fecha podrás saber en que día de la semana cayó o caerá. El código es el siguiente:
//Recibe fecha en formato DD/MM/YYYY
function dia_semana(fecha){
fecha=fecha.split('/');
if(fecha.length!=3){
return null;
}
//Array para calcular día de la semana de un año regular.
var regular =[0,3,3,6,1,4,6,2,5,0,3,5];
//Array para calcular día de la semana de un año bisiesto.
var bisiesto=[0,3,4,0,2,5,0,3,6,1,4,6];
//Array para hacer la traducción de resultado en día de la semana.
var semana=['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'];
//Día especificado en la fecha recibida.
var dia=fecha[0];
//Módulo acumulado del mes especificado en la fecha recibida.
var mes=fecha[1]-1;
//Año especificado por la fecha recibida.
var anno=fecha[2];
//Comparación para saber si el año recibido es bisiesto.
if((anno % 4 == 0) && !(anno % 100 == 0 && anno % 400 != 0))
mes=bisiesto[mes];
else
mes=regular[mes];
//Se retorna el resultado del calculo del día de la semana.
return semana[Math.ceil(Math.ceil(Math.ceil((anno-1)%7)+Math.ceil((Math.floor((anno-1)/4)-Math.floor((3*(Math.floor((anno-1)/100)+1))/4))%7)+mes+dia%7)%7)];
}
//envíamos la fecha con formato dd/mm/aa
alert(dia_semana('29/04/2017'));
8 Comentarios