Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/09/2013, 07:57
Avatar de jor_0203
jor_0203
 
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: como saber cuantos días tiene mes getMonth();

Cita:
Iniciado por loncho_rojas Ver Mensaje
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
  1. // JavaScript Document
  2. function mostrarDias(){
  3.    
  4.     var fechaInicio = document.getElementById("fechaInicio").value;
  5.     var fechaFin = document.getElementById("fechaFin").value;
  6.  
  7.     if (fechaInicio.length != 10 || fechaFin.length != 10){
  8.         document.getElementById("diasDisfrutados").value = 0;
  9.     }
  10.    
  11.     else{
  12.        
  13.         //Separamos las fechas en dias, meses y años
  14.         var diaInicio=fechaInicio.substring(0,2);
  15.         var mesInicio=fechaInicio.substring(3,5);
  16.         var anoInicio=fechaInicio.substring(6,10);
  17.        
  18.         var diaFin=fechaFin.substring(0,2);
  19.         var mesFin=fechaFin.substring(3,5);
  20.         var anoFin=fechaFin.substring(6,10);
  21.            
  22.         //Los meses empiezan en 0 por lo que le restamos 1
  23.         mesFin = mesFin -1;
  24.         mesInicio = mesInicio -1;
  25.        
  26.         //Creamos una fecha con los valores que hemos sacado
  27.         var fInicio =  new Date(anoInicio,mesInicio,diaInicio);
  28.         var fFin =  new Date(anoFin,mesFin,diaFin);
  29.        
  30.         diasTotal = 0;
  31.    
  32.         if(fFin>fInicio){
  33.            
  34.             //Para sumarle 365 días tienen que haber 2 años de diferencia
  35.             //Si no solamente sumo los días entre meses
  36.             anoInicio++;
  37.             while(anoFin>anoInicio){
  38.            
  39.             alert("Entro aquí si hay dos años de diferencia");
  40.            
  41.             if(esBisiesto(anoFin))
  42.             {
  43.                 dias_e_anio=366;
  44.             }
  45.             else
  46.                 {
  47.                     dias_e_anio=365;
  48.                 }
  49.             diasTotal = diasTotal + dias_e_anio;
  50.             anoFin--;
  51.             }
  52.            
  53.             //Para sumarle los días de un mes completo, tengo que ver que haya diferencia de 2 meses
  54.             mesInicio++;           
  55.             while(mesFin>mesInicio){
  56.                 dias_e_mes = getDays(mesFin-1,anoFin);
  57.                 diasTotal = diasTotal + dias_e_mes;
  58.                 mesFin--;
  59.             }
  60.            
  61.             //Solamente falta sumar los días
  62.             mesInicio--;
  63.             if(mesInicio==mesFin){
  64.                 diasTotal=diaFin-diaInicio+1;
  65.             }
  66.             else{
  67.                
  68.                 //Saco los días desde el mesInicio hasta fin de mes
  69.                 dias_e_mes=getDays(mesInicio,anoInicio);
  70.                 diasTotal = diasTotal + (dias_e_mes-diaInicio) +1;
  71.                 //ahora saco los días desde el principio de mesFin hasta el día
  72.                 diasTotal = diasTotal + parseInt(diaFin);
  73.                
  74.             }          
  75.         }
  76.        
  77.         //Si la fechaFin es mayor
  78.         else if (fechaFin<fechaInicio){
  79.             alert("La fecha de fin no puede ser mayor que la fecha de inicio");
  80.             diasTotal=0;       
  81.         }
  82.        
  83.         //Si las fechas son iguales
  84.         else{
  85.             diasTotal = 1;
  86.         }
  87.  
  88.     }
  89. }
  90.  
  91. function esBisiesto(ano) {
  92.     if (ano % 4 == 0)
  93.     return true
  94.     /* else */
  95.     return false
  96. }
  97.  
  98. function getDays(month, year) {
  99.  
  100.     var ar = new Array(12)
  101.     ar[0] = 31 // Enero
  102.     if(esBisiesto)
  103.         {
  104.             ar[1]=29
  105.         }
  106.     else
  107.         {
  108.             ar[1]=28
  109.         }
  110.     ar[2] = 31 // Marzo
  111.     ar[3] = 30 // Abril
  112.     ar[4] = 31 // Mayo
  113.     ar[5] = 30 // Junio
  114.     ar[6] = 31 // Julio
  115.     ar[7] = 31 // Agosto
  116.     ar[8] = 30 // Septiembre
  117.     ar[9] = 31 // Octubre
  118.     ar[10] = 30 // Noviembre
  119.     ar[11] = 31 // Diciembre
  120.  
  121.     return ar[month];
  122.     }
no imprime nada
y la puse asi






Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Documento sin t&iacute;tulo</title>
  5. </head>
  6.  
  7.  
  8.  
  9.  
  10. <script type="text/javascript">
  11. function mostrarDias(){
  12.    
  13.     var fechaInicio = document.getElementById("fechaInicio").value;
  14.     var fechaFin = document.getElementById("fechaFin").value;
  15.  
  16.     if (fechaInicio.length != 10 || fechaFin.length != 10){
  17.         document.getElementById("diasDisfrutados").value = 0;
  18.     }
  19.    
  20.     else{
  21.        
  22.         //Separamos las fechas en dias, meses y años
  23.         var diaInicio=fechaInicio.substring(0,2);
  24.         var mesInicio=fechaInicio.substring(3,5);
  25.         var anoInicio=fechaInicio.substring(6,10);
  26.        
  27.         var diaFin=fechaFin.substring(0,2);
  28.         var mesFin=fechaFin.substring(3,5);
  29.         var anoFin=fechaFin.substring(6,10);
  30.            
  31.         //Los meses empiezan en 0 por lo que le restamos 1
  32.         mesFin = mesFin -1;
  33.         mesInicio = mesInicio -1;
  34.        
  35.         //Creamos una fecha con los valores que hemos sacado
  36.         var fInicio =  new Date(anoInicio,mesInicio,diaInicio);
  37.         var fFin =  new Date(anoFin,mesFin,diaFin);
  38.        
  39.         diasTotal = 0;
  40.    
  41.         if(fFin>fInicio){
  42.            
  43.             //Para sumarle 365 días tienen que haber 2 años de diferencia
  44.             //Si no solamente sumo los días entre meses
  45.             anoInicio++;
  46.             while(anoFin>anoInicio){
  47.            
  48.             alert("Entro aquí si hay dos años de diferencia");
  49.            
  50.             if(esBisiesto(anoFin))
  51.             {
  52.                 dias_e_anio=366;
  53.             }
  54.             else
  55.                 {
  56.                     dias_e_anio=365;
  57.                 }
  58.             diasTotal = diasTotal + dias_e_anio;
  59.             anoFin--;
  60.             }
  61.            
  62.             //Para sumarle los días de un mes completo, tengo que ver que haya diferencia de 2 meses
  63.             mesInicio++;            
  64.             while(mesFin>mesInicio){
  65.                 dias_e_mes = getDays(mesFin-1,anoFin);
  66.                 diasTotal = diasTotal + dias_e_mes;
  67.                 mesFin--;
  68.             }
  69.            
  70.             //Solamente falta sumar los días
  71.             mesInicio--;
  72.             if(mesInicio==mesFin){
  73.                 diasTotal=diaFin-diaInicio+1;
  74.             }
  75.             else{
  76.                
  77.                 //Saco los días desde el mesInicio hasta fin de mes
  78.                 dias_e_mes=getDays(mesInicio,anoInicio);
  79.                 diasTotal = diasTotal + (dias_e_mes-diaInicio) +1;
  80.                 //ahora saco los días desde el principio de mesFin hasta el día
  81.                 diasTotal = diasTotal + parseInt(diaFin);
  82.                
  83.             }          
  84.         }
  85.        
  86.         //Si la fechaFin es mayor
  87.         else if (fechaFin<fechaInicio){
  88.            alert("La fecha de fin no puede ser mayor que la fecha de inicio");
  89.            diasTotal=0;        
  90.        }
  91.        
  92.        //Si las fechas son iguales
  93.        else{
  94.            diasTotal = 1;
  95.        }
  96.  
  97.    }
  98. }
  99.  
  100. function esBisiesto(ano) {
  101.    if (ano % 4 == 0)
  102.    return true
  103.    /* else */
  104.    return false
  105. }
  106.  
  107. function getDays(month, year) {
  108.  
  109.    var ar = new Array(12)
  110.    ar[0] = 31 // Enero
  111.    if(esBisiesto)
  112.        {
  113.            ar[1]=29
  114.        }
  115.    else
  116.        {
  117.            ar[1]=28
  118.        }
  119.    ar[2] = 31 // Marzo
  120.    ar[3] = 30 // Abril
  121.    ar[4] = 31 // Mayo
  122.    ar[5] = 30 // Junio
  123.    ar[6] = 31 // Julio
  124.    ar[7] = 31 // Agosto
  125.    ar[8] = 30 // Septiembre
  126.    ar[9] = 31 // Octubre
  127.    ar[10] = 30 // Noviembre
  128.    ar[11] = 31 // Diciembre
  129.  
  130.    return ar[month];
  131.    }
  132.  
  133.  
  134. </body>
  135. </html>