¿Quieres registrarte?

Clase de actionscript 3 para el manejo de fechas

Por: Zandy
8 de Octubre del 2009
1028 de clabLevel
Otros artículos de Zandy
2,077 visitas

Esta es una pequeña clase que hice para manejar las fechas, saber la diferencia, cual es mayor y viceversa.

Código :

package
{
   public class dateUtils 
   {      
      static public const SENCONDS:uint = 2;
      static public const MINUTES:uint = 3;
      static public const HOURS:uint = 4;      
      
      /**
       * 
       * @param   date1 fecha a comparar
       * @param   date2 fecha a comparar 
       * @param   unit Unidad en que se quiere devolver la diferencia. 
       * @return  Number Con la diferencia en la unidad pedida
       */
      static public function dateDiff( date1:Date, date2:Date, unit:uint):Number
      {
         var _divisor : Number = 1000*(unit==dateUtils.SENCONDS?1:(unit==dateUtils.MINUTES?60:(unit==dateUtils.HOURS?(60*60):(60*60*60))));
         var _dif:Number = (date1.getTime()-date2.getTime()) / ( _divisor );
         return Math.abs(_dif);      
      }
      
      /**
       * Devuelve la menor de las fechas pasadas por parametro.
       * @param   ...args Arreglo que contiene todas las fechas pasadas por parametro
       * @return Fecha menor.
       */
      static public function minorDate( ...args ):Date
      {
         args.sort( _orderDatesFunction );
         return args[0];
      }
      
      /**
       * Devuelve la mayor de las fechas pasadas por parametro.
       * @param   ...args Arreglo que contiene todas las fechas pasadas por parametro
       * @return Fecha mayor.
       */
      static public function mayorDate( ...args:Array ):Date
      {
         args.sort( _orderDatesFunction );
         return args[ args.length-1 ];
      }
      
      /**
       * Funcion para comparar 2 fechas. 'Usado en funcion sort del array'
       * @param   date1
       * @param   date2
       * @return
       */
      static private function _orderDatesFunction( date1:Date, date2:Date ):Number
      {
         if( date1 > date2 ) return 1;
         else if(  date1 < date2 ) return 0;
         else return -1;
      }
   }
}


y para utilizarla es igual de simple.

Código :

/** Hallando la diferencia entre 2 fechas **/
var fecha1:Date = new Date("2009/2/2 2:01 PM");
var fecha2:Date = new Date("2009/2/2 3:31 PM");

// Diferencia en minutos
trace( dateUtils.dateDiff( fecha1, fecha2, dateUtils.MINUTES );
// Diferencia en horas
trace( dateUtils.dateDiff( fecha1, fecha2, dateUtils.HOURS );

/** Hallando la menor y la mayor de todas las fechas **/
var fecha3:Date = new Date("1982/9/9 2:00 AM");
var fecha3:Date = new Date("1972/9/9 4:00 PM");

var arreglo_de_fechas:Array = new Array( fecha1, fecha2, fecha3, fecha4 );
// La menor
trace( dateUtils.minorDate( arreglo_de_fechas ).toString() );
// La mayor
trace( dateUtils.mayorDate( arreglo_de_fechas ).toString() );


Espero le sirva de utilidad a mas de uno por ahí.

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas actionscript_3

Comentarios | Enviar un comentario
Está útil, gracias por compartir (y)
Por: Zguillez
Esta muy bien aplicable, enhorabuena por publicarla...
Por: M@U
Que parecido a Java es actionscript 3 !!
Me sorprende.
Por: diego-blog
Buenas, muchas gracias por el aporte pero sabes que encontre un error en los primeros dos trace:
[code]
// Diferencia en minutos
trace( dateUtils.dateDiff( fecha1, fecha2, dateUtils.MINUTES );
// Diferencia en horas
trace( dateUtils.dateDiff( fecha1, fecha2, dateUtils.HOURS );
[code]
Por: Martincho7
Olvide poner cual es el error:
Es porque no estan bien cerrados los Trace les falta el parentesis al final "(" .
Tambien encontre otro en los otros trace que no puede convertir en Date el resultado.
Este es el error:
"TypeError: Error #1034: Error de conversión forzada: no se puede convertir []@e9e94d9 en Date.
at dateUtils$/minorDate()
at Main()"
Por: Martincho7
ahh sii.. jajajajajajajajaj es que eso lo hice al vuelo en el editor y no me fije.. gracias

@BOFH's : Pudieran updatear el post .. ???

Aqui unas funcioncillas mas que le agrege que me hicieron falta por estos dias... ! :-)

Código :

/**
       * Adelanta la fecha n dias.
       * @param   date1 objeto fecha que se quiere adelantar un dia
       * @param   cantDays Indica la cantidad de dias que se quiere adelantar la fecha
       * @param   ceroHour Indica si se pone la fecha en la hora 0... es decir a las 12:00AM
       * @return  Objeto date con la fecha adelantada un dia.
       */
      static public function nextDay( date1:Date, cantDays:uint, ceroHour:Boolean ):Date
      {
         date1.setDate( date1.getDate()+cantDays );   // Aqui paso para el otro dia....
         if ( ceroHour ) date1 = dateUtils.resetTime( date1 );
         
         return date1;
      }
      
      /**
       * Atrasa la fecha n dias.
       * @param   date1 objeto fecha que se quiere atrasar un dia
       * @param   cantDays Indica la cantidad de dias que se quiere retrasar la fecha
       * @param   ceroHour Indica si se pone la fecha en la hora 0... es decir a las 12:00AM
       * @return  Objeto date con la fecha atrasada un dia.
       */
      static public function prevDay( date1:Date, cantDays:uint, ceroHour:Boolean ):Date
      {
         date1.setDate( date1.getDate() - cantDays );   // Aqui paso para el dia anterior.
         if ( ceroHour ) date1 = dateUtils.resetTime( date1 );
         return date1;
      }
      
      /**
       * Reseta la hora de una fecha a 12:00:00 AM. que es la hora inicial del dia....
       * @param   date1 Objeto date que se va a resetear.
       * @return   Date con la hora reseteada.
       */
      static public function resetTime( date1:Date ):Date
      {
         date1.setHours(0); date1.setMinutes(0); date1.setMilliseconds(0);
         return date1;
      }


espero les sirva.. :-)
Por: Zandy
ahh sii.. jajajajajajajajaj es que esa parte la hice al vuelo en el editor de cristalab y no me fije.. gracias por la correccion

@BOFH's : Pudieran updatear el post .. ???

Aqui unas funcioncillas mas que le agrege que me hicieron falta por estos dias... ! :-)

Código :

/**
       * Adelanta la fecha n dias.
       * @param   date1 objeto fecha que se quiere adelantar un dia
       * @param   cantDays Indica la cantidad de dias que se quiere adelantar la fecha
       * @param   ceroHour Indica si se pone la fecha en la hora 0... es decir a las 12:00AM
       * @return  Objeto date con la fecha adelantada un dia.
       */
      static public function nextDay( date1:Date, cantDays:uint, ceroHour:Boolean ):Date
      {
         date1.setDate( date1.getDate()+cantDays );   // Aqui paso para el otro dia....
         if ( ceroHour ) date1 = dateUtils.resetTime( date1 );
         
         return date1;
      }
      
      /**
       * Atrasa la fecha n dias.
       * @param   date1 objeto fecha que se quiere atrasar un dia
       * @param   cantDays Indica la cantidad de dias que se quiere retrasar la fecha
       * @param   ceroHour Indica si se pone la fecha en la hora 0... es decir a las 12:00AM
       * @return  Objeto date con la fecha atrasada un dia.
       */
      static public function prevDay( date1:Date, cantDays:uint, ceroHour:Boolean ):Date
      {
         date1.setDate( date1.getDate() - cantDays );   // Aqui paso para el dia anterior.
         if ( ceroHour ) date1 = dateUtils.resetTime( date1 );
         return date1;
      }
      
      /**
       * Reseta la hora de una fecha a 12:00:00 AM. que es la hora inicial del dia....
       * @param   date1 Objeto date que se va a resetear.
       * @return   Date con la hora reseteada.
       */
      static public function resetTime( date1:Date ):Date
      {
         date1.setHours(0); date1.setMinutes(0); date1.setMilliseconds(0);
         return date1;
      }

Por: Zandy
un aportazo!
Por: merlin1989
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.