Foros del Web » Programando para Internet » Javascript »

Obtener días de diferencia entre 2 fechas

Estas en el tema de Obtener días de diferencia entre 2 fechas en el foro de Javascript en Foros del Web. Muy buenos días amigos foreros. La razón que escribo aquí es por una medida desesperada ( el tiempo y presión me come, si no fuese ...
  #1 (permalink)  
Antiguo 07/08/2013, 17:24
danneg
Invitado
 
Mensajes: n/a
Puntos:
Exclamación Obtener días de diferencia entre 2 fechas

Muy buenos días amigos foreros.

La razón que escribo aquí es por una medida desesperada (el tiempo y presión me come, si no fuese por eso, ya hubiera obtenido mi respuesta).

Estoy presentando un test, dónde una de las pruebas dice:

Cita:
Reto de programación - Programa una función que calcule los días hábiles (lunes a viernes) entre la fecha A y la fecha B *
Y bien, tengo la siguiente función

Código Javascript:
Ver original
  1. /*
  2.     @param (string) YYYY/MM/DD [fecha menor]
  3.     @param (string) YYYY/MM/DD [fecha mayor]
  4. */
  5.  
  6. function diasHabiles (d1, d2) {
  7.     d1 = new Date(d1); d2 = new Date(d2);
  8.     dif = d2.getDate() - d1.getDate();
  9.  
  10.     var weekends = 0;
  11.     for (x = 0; x < dif; x++) {
  12.         d1.setDate( d1.getDate() + 1 );
  13.         if (d1.getDay() == (6 || 0)) {
  14.             weekends++;
  15.         }
  16.     }
  17.     return (dif - weekends);
  18. }

Y funciona perfectamente entre 2 fechas que son del mismo mes. El problema está en poner 2 fechas de diferentes meses, ya que, al parecer, al restar 2 fechas, javascript sólo resta los días, es decir, si tienes una fecha del 7 de agosto y le restas el 29 de julio, te dará de diferencia 22 días (29 - 7), lo cuál obviamente no es correcto, ya que serían 9 días.

Alguien sabe a qué se debe éste comportamiento y si existe una forma de restar días entre diferentes meses? se los agradecería bastante!
  #2 (permalink)  
Antiguo 07/08/2013, 17:46
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Obtener días de diferencia entre 2 fechas

Bien, como les dije, concentrandome un poco más, podía obtener solo la respuesta, y aquí está
[ sólo tuve que establecer un puntero y que vaya incrementando conforme los días ]

Código Javascript:
Ver original
  1. /*
  2.     @param (string) YYYY/MM/DD [fecha menor]
  3.     @param (string) YYYY/MM/DD [fecha mayor]
  4. */
  5.  
  6. function diasHabiles (d1, d2) {
  7.     d1 = new Date(d1); d2 = new Date(d2);
  8.     var dias = 0;
  9.     while (d1 < d2) {
  10.         if (d1.getDay() != (6 || 0)) {
  11.             dias++;
  12.         }
  13.         d1.setDate( d1.getDate() + 1 );
  14.     }
  15.     return dias;
  16. }

Y se usa de la siguiente manera:

Código Javascript:
Ver original
  1. var dias = diasHabiles('2013/07/29', '2013/08/07');

aún así, gracias por leer el post :)
  #3 (permalink)  
Antiguo 08/08/2013, 00:31
 
Fecha de Ingreso: julio-2013
Mensajes: 87
Antigüedad: 10 años, 9 meses
Puntos: 9
Respuesta: Obtener días de diferencia entre 2 fechas

He probado tu código y da 8 días, no 9. Lo más fácil es hacer lo siguiente:

Código Javascript:
Ver original
  1. function diasHabiles (d1, d2) {
  2.     d1 = new Date(d1); d2 = new Date(d2);
  3.     var tiempo = d2.getTime()-d1.getTime();
  4.     var dias = Math.floor(tiempo/ (1000 * 60 * 60 * 24));
  5.     return dias;
  6. }
  #4 (permalink)  
Antiguo 08/08/2013, 00:38
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Obtener días de diferencia entre 2 fechas

Hola, gracias por responder.
Del 29 de julio al 7 de agosto son 8 días hábiles :P

Y gracias, experimentaré un poco con tu código :)
  #5 (permalink)  
Antiguo 09/08/2013, 01:48
 
Fecha de Ingreso: julio-2013
Mensajes: 87
Antigüedad: 10 años, 9 meses
Puntos: 9
Respuesta: Obtener días de diferencia entre 2 fechas

No me había dado cuenta de lo de "días hábiles". Lo siento.
  #6 (permalink)  
Antiguo 15/08/2013, 04:45
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Obtener días de diferencia entre 2 fechas

Descuida, aún así, gracias por el aporte :D

Etiquetas: diferencia, funcion
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:16.