Comunidad de diseño web y desarrollo en internet online

crear un Date con la fecha del dia de ayer ( SOLUCIONADO )

Citar            
MensajeEscrito el 31 Ene 2007 11:17 am
buenas, estoy rompiendome los sesos y no consigo solucionarlo, pido ayuda a los dioses :

mi finalidad es desactivar todos los dias de un DateChooser desde ayer para detras, para desactivar fechas no tengo problemas, el problema es que no se como crear un objeto Date con la fecha del dia de ayer, no se si tiene facil solución o la solucion pasa por hacer una funcioncilla que reste primero uno al dia, y en caso de que sea dia 1, reste uno al mes, y en caso de que sea enero, reste uno al año, además de tener que saber los dias que tiene el mes, y todo el rollo.

¿ alguien me puede echar una manita ?

gracias por anticipado

Por rafaeselrey

11 de clabLevel



 

msie
Citar            
MensajeEscrito el 01 Feb 2007 10:31 am
Esperaba que hubiera alguna solucion menos bruta, pero al final he escrito una funcion que devuelve un Objeto Date con el dia anterior al Objeto que se le pasa a la funcion.

Os la pongo por si a alguien le puede servir de ayuda, como siempre, seguro que se puede mejorar, pero a mi me funciona a la perfeccion.

Código :


Fayer = function(fecha):Date  {
   // separo en variables la fecha de hoy para trabajar con ella
   dia = fecha.getDate();
   mes = fecha.getMonth()+1;
   ano = fecha.getYear();
   // siempre que sea dia 1, pasamos al mes anterior
   if (dia == 1) {
      switch (mes) {
         // si es 1 de enero, pasamos al año anterior, asigno mes 13 
         // porque al final del switch siempre restamos 1 al mes
      case 1 :
         dia = 31;
         mes = 13;
         ano--;
         break;
      // los meses anteriores a estos tienen 31 dias
      case 2 :
      case 4 :
      case 6 :
      case 8 :
      case 9 :
      case 11 :
         dia = 31;
         break;
      // los meses anteriores a estos tienen 30 dias
      case 5 :
      case 7 :
      case 10 :
      case 12 :
         dia = 30;
         break;
      // si es marzo, calculo el ultimo dia de febrero
      case 3 :
         // comprueba si es bisiesto
         if ((ano%4 == 0) && ((ano%100 != 0) || (ano%400 == 0))) {
            dia = 29;
         } else {
            dia = 28;
         }
         break;
      }
      // siempre que sea el primer dia del mes, pasamos al mes anterior
      mes--;
   } else {
      // si no es dia 1, simplemente restamos uno al dia y dejamos el resto igual
      dia--;
   }
   // creamos el objeto date que retorna la funcion
   ayer = new Date(ano, mes, dia);
   return ayer;
};


pues listo, a funcionar, si alguien le encuentra alguna pega, ya sabe.

salu2 !!

Por rafaeselrey

11 de clabLevel



 

msie
Citar            
MensajeEscrito el 01 Feb 2007 02:26 pm

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 01 Feb 2007 03:43 pm
algo asi es lo que yo buscaba, de todos modos, me indica que de ese modo el objeto es "INVALID DATE"

Por rafaeselrey

11 de clabLevel



 

msie
Citar            
MensajeEscrito el 01 Feb 2007 03:50 pm
Si bueno, faltaban un par de paréntesis:

Código :

var ayer:Date=new Date(new Date().getTime()-(86400000))
trace(ayer);

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 01 Feb 2007 04:03 pm
bueno, en un principio lo que yo pretendia era tener el DateChooser con todas las fechas deshabilitadas hasta el dia de hoy, no inclusive, al final lo he conseguido, no se si de la manera mas correcta, he cambiado un par de lineas, por ejemplo, ahora no sumo 1 al mes, porque es tonteria que le pases el mes 1/0/2006 y te devuelva el 31/12/2005 para luego volver a adaptarlo para el DateChooser, finalmente queda asi :

Código :


// funcion que calcula el dia de ayer
_global.Fayer = function(fecha):Date  {
   // separo en variables la fecha de hoy para trabajar con ella
   dia = fecha.getDate();
   mes = fecha.getMonth();
   ano = fecha.getFullYear();
   // siempre que sea dia 1, pasamos al mes anterior
   if (dia == 1) {
      switch (mes) {
         // si es 1 de enero, pasamos al año anterior, asigno mes 13
         // porque al final del switch siempre restamos 1 al mes
      case 1 :
         dia = 31;
         mes = 13;
         ano--;
         break;
      // los meses anteriores a estos tienen 31 dias
      case 2 :
      case 4 :
      case 6 :
      case 8 :
      case 9 :
      case 11 :
         dia = 31;
         break;
      // los meses anteriores a estos tienen 30 dias
      case 5 :
      case 7 :
      case 10 :
      case 12 :
         dia = 30;
         break;
      // si es marzo, calculo el ultimo dia de febrero
      case 3 :
         // comprueba si es bisiesto
         if ((ano%4 == 0) && ((ano%100 != 0) || (ano%400 == 0))) {
            dia = 29;
         } else {
            dia = 28;
         }
         break;
      }
      // siempre que sea el primer dia del mes, pasamos al mes anterior
      mes--;
   } else {
      // si no es dia 1, simplemente restamos uno al dia y dejamos el resto igual
      dia--;
   }
   // creamos el objeto date que retorna la funcion
   ayer = new Date(ano, mes, dia);
   return ayer;
};


luego en el codigo para el calendario DateChooser :

Código :

// creo el Date con la fecha de ayer
var ayer:Date  = Fayer(new Date());
// deshabilito hasta el dia de ayer
calendario.disabledRanges = [{rangeStart: new Date(1990, 7, 1),rangeEnd: ayer}];


si alguien encuentra alguna mejora ... siempre es bien recibida, pero de momento me funciona.

Por rafaeselrey

11 de clabLevel



 

msie
Citar            
MensajeEscrito el 01 Feb 2007 04:06 pm
perdona, todavia no habia leido tu respuesta, la verdad es que funciona perfectamente , mi funcion habia sido un poco a la desesperada al no encontrar solucion y no obtener respuesta, de todos modos, usaré la forma que me has puesto ....

queda mi funcion para el cajon de los recuerdos chorras ......

muchas gracias.

Por rafaeselrey

11 de clabLevel



 

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.