Foros del Web » Programando para Internet » Javascript »

fechas y javascript

Estas en el tema de fechas y javascript en el foro de Javascript en Foros del Web. Hola me gustaria saber com o puedo obtener la cantidad de meses que hay entre dos fechas... si alguien me puede ayuidar estaria mu agradecida.. ...
  #1 (permalink)  
Antiguo 14/02/2007, 10:52
Avatar de hueises  
Fecha de Ingreso: septiembre-2006
Ubicación: Concepcion
Mensajes: 21
Antigüedad: 17 años, 7 meses
Puntos: 0
Pregunta fechas y javascript

Hola me gustaria saber com o puedo obtener la cantidad de meses que hay
entre dos fechas...

si alguien me puede ayuidar estaria mu agradecida..

cuidenseee!!!
  #2 (permalink)  
Antiguo 14/02/2007, 10:58
Avatar de locojars  
Fecha de Ingreso: mayo-2002
Mensajes: 265
Antigüedad: 22 años
Puntos: 4
Re: fechas y javascript

Esto seguramente te servira, solamente tienes que tomar la parte que necesites:

Código HTML:
 <html>
 <head>
  <script language="JavaScript">
   function cerosIzq(sVal, nPos){
    var sRes = sVal;
    for (var i = sVal.length; i < nPos; i++)
     sRes = "0" + sRes;
    return sRes;
   }

   function armaFecha(nDia, nMes, nAno){
    var sRes = cerosIzq(String(nDia), 2);
    sRes = sRes + "/" + cerosIzq(String(nMes), 2);
    sRes = sRes + "/" + cerosIzq(String(nAno), 4);
    return sRes;
   }

   function sumaMes(nDia, nMes, nAno, nSum){
    if (nSum >= 0){
     for (var i = 0; i < Math.abs(nSum); i++){
      if (nMes == 12){
       nMes = 1;
       nAno += 1;
      } else nMes += 1;
     }
    } else {
     for (var i = 0; i < Math.abs(nSum); i++){
      if (nMes == 1){
       nMes = 12;
       nAno -= 1;
      } else nMes -= 1;
     }
    }
    return armaFecha(nDia, nMes, nAno);
   }

   function esBisiesto(nAno){
    var bRes = true;
    res = bRes && (nAno % 4 == 0);
    res = bRes && (nAno % 100 != 0);
    res = bRes || (nAno % 400 == 0);
    return bRes;
   }

   function finMes(nMes, nAno){
    var nRes = 0;
    switch (nMes){
     case 1: nRes = 31; break;
     case 2: nRes = 28; break;
     case 3: nRes = 31; break;
     case 4: nRes = 30; break;
     case 5: nRes = 31; break;
     case 6: nRes = 30; break;
     case 7: nRes = 31; break;
     case 8: nRes = 31; break;
     case 9: nRes = 30; break;
     case 10: nRes = 31; break;
     case 11: nRes = 30; break;
     case 12: nRes = 31; break;
    }
    return nRes + (((nMes == 2) && esBisiesto(nAno))? 1: 0);
   }

   function diasDelAno(nAno){
    var nRes = 365;
    if (esBisiesto(nAno)) nRes++;
    return nRes;
   }

   function anosEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1)
   {
	    var nRes = Math.max(0, nAn1 - nAn0 - 1);
	    if (nAn1 != nAn0)
	     if ((nMe1 > nMe0) || ((nMe1 == nMe0) && (nDi1 >= nDi0)))
	      nRes++;
	    return nRes;
   }

   function mesesEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1)
   {
	    var nRes;
	    if ((nMe1 < nMe0) || ((nMe1 == nMe0) && (nDi1 < nDi0))) nMe1 += 12;
	    nRes = Math.max(0, nMe1 - nMe0 - 1);
	    if ((nDi1 > nDi0) && (nMe1 != nMe0)) nRes++;
	    return nRes;
   }

   function diasEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1)
   {
	    var nRes;
	    if (nDi1 < nDi0) nDi1 += finMes(nMe0, nAn0);
	    nRes = Math.max(0, nDi1 - nDi0);
	    return nRes;
   }

   function mayorOIgual(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1)
   {
	    var bRes = false;
	    bRes = bRes || (nAn1 > nAn0);
	    bRes = bRes || ((nAn1 == nAn0) && (nMe1 > nMe0));
	    bRes = bRes || ((nAn1 == nAn0) && (nMe1 == nMe0) && (nDi1 >= nDi0));
	    return bRes;
   }

   function calcula()
   {
	    var sFc0 = document.frm.fecha0.value; // Se asume válida
	    var sFc1 = document.frm.fecha1.value; // Se asume válida
	    var nDi0 = parseInt(sFc0.substr(0, 2), 10);
	    var nMe0 = parseInt(sFc0.substr(3, 2), 10);
	    var nAn0 = parseInt(sFc0.substr(6, 4), 10);
	    var nDi1 = parseInt(sFc1.substr(0, 2), 10);
	    var nMe1 = parseInt(sFc1.substr(3, 2), 10);
	    var nAn1 = parseInt(sFc1.substr(6, 4), 10);
	    if (mayorOIgual(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1))
		{
		     var nAno = anosEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1);
		     var nMes = mesesEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1);
		     var nDia = diasEntre(nDi0, nMe0, nAn0, nDi1, nMe1, nAn1);
		     var nTtM = nAno * 12 + nMes;
		     var nTtD = nDia;
		     for (var i = nAn0; i < nAn0 + nAno; i++) nTtD += diasDelAno(nAno);
		     for (var j = nMe0; j < nMe0 + nMes; j++) nTtD += finMes(j, nAn1);
		     var nTSS = Math.floor(nTtD / 7);
		     var nTSD = nTtD % 7;
		     document.frm.difDMA.value = String(nAno) + " años, " + String(nMes) + " meses, " + String(nDia) + " días";
		     document.frm.difDM.value = String(nTtM) + " meses, " + String(nDia) + " días";
		     document.frm.difD.value = String(nTtD) + " días";
		     document.frm.difSD.value = String(nTSS) + " semanas, " + String(nTSD) + " días";
	    } else alert("Error en rango");
   }
  </script>
 </head>
 <body>
  <form name="frm">
   <table border="0">
    <tr>

     <td>
      <table border="1">
       <tr>
        <td align="right">
         Fecha inicial (dd/mm/aaaa)
        </td>
        <td>
         <input type="text" name="fecha0" value="31/08/1996">
        </td>

       </tr>
       <tr>
        <td align="right">
         Fecha final (dd/mm/aaaa)
        </td>
        <td>
         <input type="text" name="fecha1" value="09/07/1999">
        </td>
       </tr>

       <tr>
        <td align="right">
         Diferencia (D,M,A)
        </td>
        <td>
         <input type="text" name="difDMA" readonly>
        </td>
       </tr>
       <tr>

        <td align="right">
         Diferencia (D,M)
        </td>
        <td>
         <input type="text" name="difDM" readonly>
        </td>
       </tr>
       <tr>
        <td align="right">

         Diferencia (D)
        </td>
        <td>
         <input type="text" name="difD" readonly>
        </td>
       </tr>
       <tr>
        <td align="right">
         Diferencia (SD)
        </td>

        <td>
         <input type="text" name="difSD" readonly>
        </td>
       </tr>
      </table>
     </td>
    </tr>
    <tr>
     <td align="center">

      <input type="button" value="Calcular" onclick="calcula()">
     </td>
    </tr>
   </table>
  </form>
 </body>
</html> 
Saludos,
Jars.
  #3 (permalink)  
Antiguo 14/02/2007, 11:02
Avatar de hueises  
Fecha de Ingreso: septiembre-2006
Ubicación: Concepcion
Mensajes: 21
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: fechas y javascript

no existira una forma mas pequeña en la que pueda solo restar fechas ???
  #4 (permalink)  
Antiguo 14/02/2007, 11:03
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Re: fechas y javascript

Algo así?
Código:
<script>
anterior=new Date(2006,10,5);
posterior=new Date(2007,12,1);
resultado=posterior-anterior;
pepe=resultado/1000/3600/30/24
alert(parseInt(pepe)+" meses");
</script>
Lo malo es que toma como mes 30 días... si son muchos meses puede dar una cantidad inexacta...
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #5 (permalink)  
Antiguo 14/02/2007, 11:09
Avatar de hueises  
Fecha de Ingreso: septiembre-2006
Ubicación: Concepcion
Mensajes: 21
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: fechas y javascript

lo que pasa es que me pasaron un codigo para sumar la cantidad de dias que hay entre dos fechass que es este...

<?
<tr>
<td><strong>DURACION (DIAS)</strong></td>
<script>
function dias(fecha1,fecha2)
{
m_fecha1 = fecha1.split('/');
dia_fecha1 = m_fecha1[0];
mes_fecha1 = m_fecha1[1];
year_fecha1 = m_fecha1[2];
mes_fecha1 = mes_fecha1 - 1; // para js los meses del año son de 0 - 11, de ahi ese calculo.
dia_fecha1 = dia_fecha1 - 1;
var fecha1_js = new Date(year_fecha1, mes_fecha1, dia_fecha1)


m_fecha2 = fecha2.split('/');
dia_fecha2 = m_fecha2[0];
mes_fecha2 = m_fecha2[1];
year_fecha2 = m_fecha2[2];
mes_fecha2 = mes_fecha2 - 1; // para js los meses del año son de 0 - 11, de ahi ese calculo.


var fecha2_js = new Date(year_fecha2, mes_fecha2, dia_fecha2)

var un_dia=1000*60*60*24

form1.duracion_curso.value=Math.ceil((fecha1_js.ge tTime()- fecha2_js.getTime())/(un_dia)) * -1;

}
</script>
<td><input type=text name=duracion_curso readonly> <input type="button" name="calcular" value="calcular" onClick="dias(fecha_inicio_curso.value,fecha_termi no_curso.value)"></td>
</tr>
?>

y lo que quiero saber si se puede modificar este mismo codigo para que en vez de que me cuente los dias entre las dos fechas, me cuente los meses entre dos fechas...
  #6 (permalink)  
Antiguo 14/02/2007, 11:30
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Re: fechas y javascript

Básicamente lo que hace tu código es lo mismo que lo que dije yo. Para modificarlo sólo tienes que cambiar:

var un_dia=1000*60*60*24

por

var un_dia=1000*60*60*24*30
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #7 (permalink)  
Antiguo 14/02/2007, 11:45
Avatar de hueises  
Fecha de Ingreso: septiembre-2006
Ubicación: Concepcion
Mensajes: 21
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: fechas y javascript

esta super bien lo que me dijiste solo que en vez de mostrarme la cantidad real de meses entre dos fechas me muestra una menos, es decir, si pongo 15/02 y 15/04 en vez de que me cuente 2 meses me cuenta 1 ...a que se debe eso?
  #8 (permalink)  
Antiguo 14/02/2007, 11:57
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Re: fechas y javascript

Por el ceil:

orm1.duracion_curso.value=Math.ceil((fecha1_js.ge tTime()- fecha2_js.getTime())/(un_dia)) * -1;

cambialo:
form1.duracion_curso.value=Math.parseInt((fecha1_j s- fecha2_js)/(un_dia)) * -1;

Ponlo así y ya está
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.

Última edición por KarlanKas; 14/02/2007 a las 12:02
  #9 (permalink)  
Antiguo 14/02/2007, 11:59
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: fechas y javascript

Hola:

hueises: Estrás repitiendo la misma pregunta desde hace algunos días, y las respuestas han sido siermpre muy buenas: ayuda por fa!!!!!!, Realmente Es Urgente!!!, fechas con javascript, cajas de texto y datos y ahora este mensaje...

Antes de abrir nuevos temas, deberías revisar tus anteriores preguntas o hacer búsquedas tanto en los foros como en las FAQs.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #10 (permalink)  
Antiguo 14/02/2007, 13:29
Avatar de hueises  
Fecha de Ingreso: septiembre-2006
Ubicación: Concepcion
Mensajes: 21
Antigüedad: 17 años, 7 meses
Puntos: 0
De acuerdo Re: fechas y javascript

muchisimas gracias por tu ayuda karlankas....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 02:37.