Foros del Web » Programando para Internet » Javascript »

Extrañísimo problema al sumar días a una fecha

Estas en el tema de Extrañísimo problema al sumar días a una fecha en el foro de Javascript en Foros del Web. Hola, vereis os cuento: Tengo implementado un generador automático de calendarios. Le metes una fecha y el sistema va sumando automáticamente de siete en siete ...
  #1 (permalink)  
Antiguo 02/09/2008, 12:08
 
Fecha de Ingreso: junio-2006
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
Extrañísimo problema al sumar días a una fecha

Hola, vereis os cuento:

Tengo implementado un generador automático de calendarios. Le metes una fecha y el sistema va sumando automáticamente de siete en siete días.

Todo funciona a la perfección salvo en la maldita fecha del 26/10/2008. Llevo arrastrando meses el problema y no consigo dar con la solución.

Pongo un sencillo ejemplo de lo que falla:

Código:
miFecha = new Date(2008,9,26);
unDiaMas = new Date();
unDiaMas.setTime(miFecha.getTime() + 1000*60*60*24);
alert(unDiaMas.getDate());
Este trozo tonto de código debería sumar un día a la fecha del 26/10/2008, es decir, unDiaMas.getDate() debería devolverme 27.

¡¡ PUES NO !! No se que demonios pasa, pero sigue devolviéndome 26. Y lo que me cabrea es que sólo ocurre con esa fecha en concreto.... con el resto de fechas, todo OK.

NOTA 1: Si multiplico por 25, en lugar de *24, la operación la hace correctamente.

NOTA 2: Justo cuando escribo este mensaje se me ocurre que pueda tener algo que ver el cambio horario... ¿Sería esto posible?

Gracias anticipadas
  #2 (permalink)  
Antiguo 02/09/2008, 12:24
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Extrañísimo problema al sumar días a una fecha

Yo lo he probado con Firefox e IExplorer y funciona perfectamente .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 15/07/2009, 09:29
 
Fecha de Ingreso: junio-2006
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Extrañísimo problema al sumar días a una fecha

Hola amigos, ha pasado un año desde mi pregunta y sigo con el mismo problema. Por lo menos ya he confirmado que se trata del cambio horario de verano a invierno.

Código:
miFecha = new Date(2009,9,25);
unDiaMas = new Date();
unDiaMas.setTime(miFecha.getTime() + 1000*60*60*24);
alert(unDiaMas.getDate());
El código anterior suma un día (24 horas) al 25/10/2009. Precisamente ese día 25 es el cambio de hora (a las 3 serán las 2) y por tanto el día tiene 25 horas, de ahí el problema que comentaba en mi primer post.

¿Solución? Comprobar si el día a evaluar es el último domingo de octubre, en cuyo caso habrá que multiplicar por 25 horas para sumar un día.

www punto telefonica punto net/web2/afines/cambio_horario_verano_invierno/

Espero que esto le sirva a alguien que haya tenido el mismo problema.

Saludos
  #4 (permalink)  
Antiguo 15/07/2009, 21:15
Avatar de marcopoloaz06  
Fecha de Ingreso: julio-2007
Ubicación: México
Mensajes: 457
Antigüedad: 16 años, 9 meses
Puntos: 11
Sonrisa Respuesta: Extrañísimo problema al sumar días a una fecha

Hola, ps facilmente mira primero no te enojes porque el que se enoja pierde xD aunque ya pasando un año que frustración y no soy superman pero creo te puedo salvar:

EL método add para la clase Date:
DateAdd.js
Código javascript:
Ver original
  1. Date.prototype.add = function (sInterval, iNum) {
  2.     var dTemp = this;
  3.     var t;
  4.     if (!sInterval || iNum == 0) return dTemp;
  5.     switch (sInterval.toLowerCase()) {
  6.     case "ms":
  7.         t = dTemp.setMilliseconds(dTemp.getMilliseconds() + iNum);
  8.         dTemp.setMilliseconds(dTemp.getMilliseconds() - iNum);
  9.         break;
  10.     case "s":
  11.         t = dTemp.setSeconds(dTemp.getSeconds() + iNum);
  12.         dTemp.setSeconds(dTemp.getSeconds() - iNum);
  13.         break;
  14.     case "n":
  15.         t = dTemp.setMinutes(dTemp.getMinutes() + iNum);
  16.         dTemp.setMinutes(dTemp.getMinutes() - iNum);
  17.         break;
  18.     case "h":
  19.         t = dTemp.setHours(dTemp.getHours() + iNum);
  20.         dTemp.setHours(dTemp.getHours() - iNum);
  21.         break;
  22.     case "d":
  23.         t = dTemp.setDate(dTemp.getDate() + iNum);
  24.         dTemp.setDate(dTemp.getDate() - iNum);
  25.         break;
  26.     case "m":
  27.         t = dTemp.setMonth(dTemp.getMonth() + iNum);
  28.         dTemp.setMonth(dTemp.getMonth() - iNum);
  29.         break;
  30.     case "y":
  31.         t = dTemp.setFullYear(dTemp.getFullYear() + iNum);
  32.         dTemp.setFullYear(dTemp.getFullYear() - iNum);
  33.         break;
  34.     }
  35.     return new Date(t);
  36. };

y la usas de la siguiente manera:
Código javascript:
Ver original
  1. var d = new Date();
  2. var d2 = d.add("d", 4); //+4 dias
  3. var d3 = d.add("h", -1); //-1 hora
  4. var d4 = d.add("m", 2); //+2 meses

espero que hayas entendido ahora con tu ejemplo seria:
Código javascript:
Ver original
  1. var miFecha = new Date(2008,9,26);
  2. var unDiaMas = miFecha.add('d', 1);
  3. alert(unDiaMas.getDate());

bueno espero que te sirva
saludoss
:]
__________________
Aerolíneas Alicia :D
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:17.