11/09/2013, 07:57
|
| | | Fecha de Ingreso: octubre-2011 Ubicación: mexico
Mensajes: 760
Antigüedad: 13 años, 3 meses Puntos: 8 | |
Respuesta: como saber cuantos días tiene mes getMonth(); Cita:
Iniciado por loncho_rojas Esta es una función que me calcula diferencia entre 2 fechas, tomando en cuenta años biciestos, que al Javascript se le escapan... no se si te soluciona la vida, pero te puede servir para marearte una rato y ver su comportamiento..
Código Javascript :
Ver original// JavaScript Document function mostrarDias(){ var fechaInicio = document.getElementById("fechaInicio").value; var fechaFin = document.getElementById("fechaFin").value; if (fechaInicio.length != 10 || fechaFin.length != 10){ document.getElementById("diasDisfrutados").value = 0; } else{ //Separamos las fechas en dias, meses y años var diaInicio=fechaInicio.substring(0,2); var mesInicio=fechaInicio.substring(3,5); var anoInicio=fechaInicio.substring(6,10); var diaFin=fechaFin.substring(0,2); var mesFin=fechaFin.substring(3,5); var anoFin=fechaFin.substring(6,10); //Los meses empiezan en 0 por lo que le restamos 1 mesFin = mesFin -1; mesInicio = mesInicio -1; //Creamos una fecha con los valores que hemos sacado var fInicio = new Date(anoInicio,mesInicio,diaInicio); var fFin = new Date(anoFin,mesFin,diaFin); diasTotal = 0; if(fFin>fInicio){ //Para sumarle 365 días tienen que haber 2 años de diferencia //Si no solamente sumo los días entre meses anoInicio++; while(anoFin>anoInicio){ alert("Entro aquí si hay dos años de diferencia"); if(esBisiesto(anoFin)) { dias_e_anio=366; } else { dias_e_anio=365; } diasTotal = diasTotal + dias_e_anio; anoFin--; } //Para sumarle los días de un mes completo, tengo que ver que haya diferencia de 2 meses mesInicio++; while(mesFin>mesInicio){ dias_e_mes = getDays(mesFin-1,anoFin); diasTotal = diasTotal + dias_e_mes; mesFin--; } //Solamente falta sumar los días mesInicio--; if(mesInicio==mesFin){ diasTotal=diaFin-diaInicio+1; } else{ //Saco los días desde el mesInicio hasta fin de mes dias_e_mes=getDays(mesInicio,anoInicio); diasTotal = diasTotal + (dias_e_mes-diaInicio) +1; //ahora saco los días desde el principio de mesFin hasta el día diasTotal = diasTotal + parseInt(diaFin); } } //Si la fechaFin es mayor else if (fechaFin<fechaInicio){ alert("La fecha de fin no puede ser mayor que la fecha de inicio"); diasTotal=0; } //Si las fechas son iguales else{ diasTotal = 1; } } } function esBisiesto(ano) { if (ano % 4 == 0) return true /* else */ return false } function getDays(month, year) { var ar = new Array(12) ar[0] = 31 // Enero if(esBisiesto) { ar[1]=29 } else { ar[1]=28 } ar[2] = 31 // Marzo ar[3] = 30 // Abril ar[4] = 31 // Mayo ar[5] = 30 // Junio ar[6] = 31 // Julio ar[7] = 31 // Agosto ar[8] = 30 // Septiembre ar[9] = 31 // Octubre ar[10] = 30 // Noviembre ar[11] = 31 // Diciembre return ar[month]; }
no imprime nada
y la puse asi
Código HTML:
Ver original<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> function mostrarDias(){ var fechaInicio = document.getElementById("fechaInicio").value; var fechaFin = document.getElementById("fechaFin").value; if (fechaInicio.length != 10 || fechaFin.length != 10){ document.getElementById("diasDisfrutados").value = 0; } else{ //Separamos las fechas en dias, meses y años var diaInicio=fechaInicio.substring(0,2); var mesInicio=fechaInicio.substring(3,5); var anoInicio=fechaInicio.substring(6,10); var diaFin=fechaFin.substring(0,2); var mesFin=fechaFin.substring(3,5); var anoFin=fechaFin.substring(6,10); //Los meses empiezan en 0 por lo que le restamos 1 mesFin = mesFin -1; mesInicio = mesInicio -1; //Creamos una fecha con los valores que hemos sacado var fInicio = new Date(anoInicio,mesInicio,diaInicio); var fFin = new Date(anoFin,mesFin,diaFin); diasTotal = 0; if(fFin>fInicio){ //Para sumarle 365 días tienen que haber 2 años de diferencia //Si no solamente sumo los días entre meses anoInicio++; while(anoFin>anoInicio){ alert("Entro aquí si hay dos años de diferencia"); if(esBisiesto(anoFin)) { dias_e_anio=366; } else { dias_e_anio=365; } diasTotal = diasTotal + dias_e_anio; anoFin--; } //Para sumarle los días de un mes completo, tengo que ver que haya diferencia de 2 meses mesInicio++; while(mesFin>mesInicio){ dias_e_mes = getDays(mesFin-1,anoFin); diasTotal = diasTotal + dias_e_mes; mesFin--; } //Solamente falta sumar los días mesInicio--; if(mesInicio==mesFin){ diasTotal=diaFin-diaInicio+1; } else{ //Saco los días desde el mesInicio hasta fin de mes dias_e_mes=getDays(mesInicio,anoInicio); diasTotal = diasTotal + (dias_e_mes-diaInicio) +1; //ahora saco los días desde el principio de mesFin hasta el día diasTotal = diasTotal + parseInt(diaFin); } } //Si la fechaFin es mayor else if (fechaFin<fechaInicio){ alert("La fecha de fin no puede ser mayor que la fecha de inicio"); diasTotal=0; } //Si las fechas son iguales else{ diasTotal = 1; } } } function esBisiesto(ano) { if (ano % 4 == 0) return true /* else */ return false } function getDays(month, year) { var ar = new Array(12) ar[0] = 31 // Enero if(esBisiesto) { ar[1]=29 } else { ar[1]=28 } ar[2] = 31 // Marzo ar[3] = 30 // Abril ar[4] = 31 // Mayo ar[5] = 30 // Junio ar[6] = 31 // Julio ar[7] = 31 // Agosto ar[8] = 30 // Septiembre ar[9] = 31 // Octubre ar[10] = 30 // Noviembre ar[11] = 31 // Diciembre return ar[month]; }
|