synthroid taking instructions

Inicio > Programación Web > Javascript: Numero de días entre dos fechas

Javascript: Numero de días entre dos fechas

Viernes, 2 de Junio de 2017 Dejar un comentario Ir a comentarios

Para un proyecto reciente, necesitaba la capacidad de calcular el número de días entre dos fechas. En el lenguaje VB, esto es bastante fácil de hacer. Pero yo necesitaba hacerlo en la web. Después de un poco de búsqueda, encontré un trozo de código en http://javascript.internet.com que era capaz de modificarlo para adaptarse a mis necesidades. He modificado el código para ser una función genérica, y pensé en compartirlo.


function daysBetween(date1, date2){ 
   if (date1.indexOf("-") != -1) { date1 = date1.split("-"); } else if (date1.indexOf("/") != -1) { date1 = date1.split("/"); } else { return 0; } 
   if (date2.indexOf("-") != -1) { date2 = date2.split("-"); } else if (date2.indexOf("/") != -1) { date2 = date2.split("/"); } else { return 0; } 
   if (parseInt(date1[0], 10) >= 1000) { 
       var sDate = new Date(date1[0]+"/"+date1[1]+"/"+date1[2]);
   } else if (parseInt(date1[2], 10) >= 1000) { 
       var sDate = new Date(date1[2]+"/"+date1[0]+"/"+date1[1]);
   } else { 
       return 0; 
   } 
   if (parseInt(date2[0], 10) >= 1000) { 
       var eDate = new Date(date2[0]+"/"+date2[1]+"/"+date2[2]);
   } else if (parseInt(date2[2], 10) >= 1000) { 
       var eDate = new Date(date2[2]+"/"+date2[0]+"/"+date2[1]);
   } else { 
       return 0; 
   } 
   var one_day = 1000*60*60*24; 
   var daysApart = Math.abs(Math.ceil((sDate.getTime()-eDate.getTime())/one_day)); 
   return daysApart; 
} 

Ten en cuenta que se supone que las cadenas de fechas se pasan con un separador de fecha: un guión o una barra. La función Date en JavaScript toma como parámetros un año, luego mes (0-11), y luego el día. La función busca 4 dígitos, ya sea en la primera “parte” o la última “parte” y lo establece, como el año. Para el mes y el día, el primer ” dígitos no de cuatro” aparentemente son el mes y el segundo es el día. Así que, básicamente, el formato puede ser AAAA-MM-DD o DD-MM-AAAA y el separador puede ser una barra o un guión y el mes y el día puede ser un dígito o dos dígitos (el año debe ser de cuatro dígitos).

Comparte y diviertete:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • BlinkList
  • Blogosphere
  • Live
  • Meneame
  • MSN Reporter
  • MySpace
  • RSS
  • Suggest to Techmeme via Twitter
  • Technorati
  • LinkedIn
  • email
  • FriendFeed
  • PDF
  • Reddit
  • Wikio IT
  • Add to favorites
  • blogmarks
  • max fuentes

    esto hace lo mismo sin tanto peo XD pot1 es fechainicio y opt2 fechafinal el formato fecha YY-MM-DD

    tem = opt1.value.split(‘-‘);

    tem2 = new Date(tem[0],tem[1]-1,tem[2]);

    temp = opt2.value.split(‘-‘);
    temp2 = new Date(temp[0],temp[1]-1,temp[2]);
    alert(temp2.getDate() – tem2.getDate());

  • Muchas gracias por compartir, me funciono de maravilla el formato que use fue MM/DD/YYYY …

  • jheras89

    Hola, he visto que a muchos de vosotros no os funcionaba, el problema es un pequeño error que es típico de cualquier despiste, os pego el código corregido, un saludo 😉

    function daysBetween(date1, date2){   if (date1.indexOf(“-“) != -1) { date1 = date1.split(“-“); } else if (date1.indexOf(“/”) != -1) { date1 = date1.split(“/”); } else { return 0; }   if (date2.indexOf(“-“) != -1) { date2 = date2.split(“-“); } else if (date2.indexOf(“/”) != -1) { date2 = date2.split(“/”); } else { return 0; }   if (parseInt(date1[0], 10) >= 1000) {       var sDate = new Date(date1[0]+”/”+date1[1]+”/”+date1[2]);   } else if (parseInt(date1[2], 10) >= 1000) {       var sDate = new Date(date1[2]+”/”+date1[1]+”/”+date1[0]);   } else {       return 0;   }   if (parseInt(date2[0], 10) >= 1000) {       var eDate = new Date(date2[0]+”/”+date2[1]+”/”+date2[2]);   } else if (parseInt(date2[2], 10) >= 1000) {       var eDate = new Date(date2[2]+”/”+date2[1]+”/”+date2[0]);   } else {       return 0;   }   var one_day = 1000*60*60*24;   var daysApart = Math.abs(Math.ceil((sDate.getTime()-eDate.getTime())/one_day));   return daysApart;}
     

    El error estaba al crear las fechas, el orden de las posiciones del array no era correcto.

  • Brunoquintana

    Si la verdad es que da cualquier resultado menos el esperado.. jeje

  • DanielPro

    Si quieren algo exacto que calcule bien en javascript vayan a esta pagina slingfive es una libreria.

  • Warmnet2001

    Muy bueno el script, pero sabes que a mi me funciona en el formato mes-dia-año.
    Que puede ser? yo ingreso normalmente dia-mes-año, entonces cuanto ingreso 11-11-2010 y 12-11-2010 me devuelve 30, y cuando ingreso 11-11-2010 y 11-12-2010 me devuelve 1.
    Saludos

  • Pingback: Bitacoras.com()

Top Footer