Por: _CONEJO + 17 de Noviembre del 2005
Trabajar con fechas en ActionScript puede llegar a ser un verdadero engorro, sobre todo si deseas dar cierto formato al churro de información. En PHP con $var = Date("pattern"); tenemos gran parte del trabajo hecho, simplemente nos devuelve una cadena de texto -o numérica- con el patrón que le indiquemos en el parámetro. (Más información en la página de PHP.net)
La clase Fecha intenta emular esa opción que no existe en ActionScript, una mini-clase que a través de un patrón te devuelve la fecha ordenada como le digas. No tiene mucho misterio, aún le falta algo de trabajo, pero resulta muy cómoda, sobre todo para mostrar fechas sin engorrar el código que tengamos.
Creo que el código es lo suficientemente sencillo como para no tener que comentar mucho.
Código :
/* Clase Fecha * Extiende la Clase Date para ofrecer un servicio de formatos como hace en PHP * al estilo fecha.formato(d/m/Y - H:i); output "21/06/2005 - 07:30" * * Se agradecería todo tipo de feedback y reporte de fallos/dudas/problemas * * @autor : Daniel Esteban García - www.theNinjaBunny.com */ class Fecha extends Date { // Algunas variables necesarias private var idioma:String; private var diasAr,mesesAr:Array; private var numDias:Array = new Array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"); function Fecha(a:Number,b:Number,c:Number,d:Number,e:Number,f:Number,g:Number) { // Creamos el objeto Date super(a,b,c,d,e,f,g); // Seteamos el idioma, por defecto ESPAÑOL setIdioma("ES"); }; /* Funcion que nos pone el idioma * Util si queremos los meses en otro idioma, añadir nuevos es MUY facil! * Haganlo y mandenme algunas traducciones! Para el codigo del idioma usaremos * DOS LETRAS */ public function setIdioma(idi:String):Void { idioma!=null?idioma = idi.toUpperCase():idioma="ES"; switch (idioma) { // ESPAÑOL case "ES" : diasAr = new Array("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"); mesesAr = new Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"); break; // INGLES case "EN" : diasAr = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"); mesesAr = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); break; // En caso de duda, español! default : idioma = "ES"; }; }; // Nos devuelve el idioma actual de la Fecha, no se que tan util sera, // pero la funcion era facil de hacer xDxD public function getIdioma():String { return idioma; }; /* Esta es la funcion chula, creo que quizas se podría optimizar algo * Basicamente lo que hace es parsear letra por letra * la $ sirve para escapear letras * por ejemplo "d/m/Y $a $l$a$s H:i" imprimiria "01/01/2000 a las 23:07" * Algo amorfo, pero con \ se fastidiaba el tema */ public function formato(pattern:String):String { if(pattern.length>0) { var block:Array = pattern.split("$"); var l:Number = block.length; var cadena:String = ""; for(var a:Number = 0;a<l;a++) { if(block[a].length>1) { if(a!=0) { cadena += block[a].substr(0,1); } else { cadena += dameDato(block[0].substr(0,1)); }; for(var b:Number = 1;b<block[a].length;b++ ) { cadena += dameDato(block[a].substr(b,1)); }; } else if(block[a].length==1) { if(a!=0) { cadena += block[a]; } else { cadena += dameDato(block[0]); }; }; }; return cadena; } else { return ""; }; }; /* Esta si que es la funcion chula de verdad * segun el caracter que le pases como parametro te devolvera el dato * que estabas buscando. * * Usa las mismas letras que en PHP, aunque no estan todas, al final * del documento se enuncian las letras que aun no estan implementadas * * Para saber que hace cada letra dirijanse a : * http://es.php.net/manual/es/function.date.php */ private function dameDato(char:String):String { var dato:String =""; var tmp:Object = new Object(); switch(char) { case "d": tmp = this.getDate(); tmp.toString().length<2?dato = "0"+tmp.toString():dato = tmp.toString(); break; case "D": dato = diasAr[this.getDay()].substr(0,3); break; case "j": dato = this.getDate().toString(); break; case "l": dato = diasAr[this.getDay()]; break; case "w": dato = this.getDay().toString(); break; case "z": tmp = this.getMonth(); var dias:Number = 0; if(tmp>0) { for(var m:Number = 0;m<tmp;m++) { dias += Number(numDias[m]); if(anioBisiesto(this.getYear()+1900) && m>1) { dias++; }; }; }; dias += this.getDate(); dato = dias.toString(); break; case "F": dato = mesesAr[this.getMonth()]; break; case "m": tmp = this.getMonth()+1; tmp.toString().length<2?dato = "0"+tmp.toString():dato = tmp.toString(); break; case "M": dato = mesesAr[this.getMonth()].substr(0,3); break; case "n": dato = (this.getMonth()+1).toString(); break; case "t": if(anioBisiesto(this.getYear()+1900) && this.getMonth()==1) { dato = "29"; } else { dato = numDias[this.getMonth()]; }; break; case "L": anioBisiesto(this.getYear()+1900)? dato = "1" : dato = "0"; break; case "Y": tmp = this.getYear()+1900; dato = tmp.toString(); break; case "y": tmp = this.getYear()+1900; dato = tmp.toString().substr(2,2); break; case "a": this.getHours()>=12? dato = "pm" : dato = "am"; break; case "A": this.getHours()>=12? dato = "PM" : dato = "AM"; break; case "g": this.getHours()>=12? dato = (this.getHours()-12).toString() : dato = this.getHours().toString(); break; case "G": dato = this.getHours().toString(); break; case "h": this.getHours()>=12? dato = (this.getHours()-12).toString() : dato = this.getHours().toString(); dato.length==1 ? dato = "0"+dato : dato = dato; break; case "H": dato = this.getHours().toString(); dato.length==1 ? dato = "0"+dato : dato = dato; break; case "i": dato = this.getMinutes().toString(); dato.length==1 ? dato = "0"+dato : dato = dato; break; case "s": dato = this.getSeconds().toString(); dato.length==1 ? dato = "0"+dato : dato = dato; break; default : dato = char; break; }; return dato; }; // Mini funcion que devuelve si un año es bisiesto o no public static function anioBisiesto(ano:Number):Boolean { return ((ano%4 == 0) && (ano%100 != 0)) || (ano%400 == 0) ? true : false; }; }; /* LETRAS SIN IMPLEMENTAR * e Identificador de zona horaria (agregado en PHP 5.1.0) Ejemplos: UTC, GMT, Atlantic/Azores * I (i mayúscula) Indica si la fecha están en hora de ahorro de luz diurna 1 si es Hora de Ahorro de * Luz Diurna, 0 de lo contrario. * O Diferencia con la hora Greenwich (GMT) en horas Ejemplo: +0200 * T Configuración de zona horaria de esta máquina Ejemplos: EST, MDT ... * Z Desplazamiento de la zona horaria en segundos. El desplazamiento para zonas horarias al oeste de UTC es * siempre negativo, y el de aquellas al este de UTC es siempre positivo. -43200 a 43200 * c Fecha ISO 8601 (agregada en PHP 5) 2004-02-12T15:19:21+00:00 * r Fecha en formato RFC 2822 Ejemplo: Thu, 21 Dec 2000 16:01:07 +0200 * U Segundos desde el Epoch Unix (January 1 1970 00:00:00 GMT) Vea también time() * B Hora Swatch Internet 000 a 999 * o Número de año ISO-8601. Este es el mismo valor que Y, excepto que si el número de semana ISO (W) * pertenece al año previo o siguiente, ese año será usado en su lugar. (agregado en PHP 5.1.0) Ejemplos: * 1999 o 2003 * S Sufijo ordinal en inglés del dia del mes, 2 caracteres st, nd, rd o th. Funciona bien con j * W Número de la semana del año ISO-8601, las semanas comienzan en Lunes (agregado en PHP 4.1.0) Ejemplo: * 42 (la 42va semana del año) */
Código :
//Importamos la clase
import Fecha;
//Creamos nuestro objeto Fecha (admite los mismos parametros que Date)
var fecha:Fecha = new Fecha();
// Hacemos que nos muestre la fecha de forma
// "Jueves 17 de Noviembre de 2005"
trace(fecha.formato("l j $d$e F $d$e Y"));
Código :
import Fecha;
Código :
private var numDias:Array = new Array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
Código :
Fecha() {
// Creamos el objeto Date
super(arguments);
// Seteamos el idioma, por defecto ESPAÑOL
setIdioma("ES");
};
Código :
idioma= (!idioma) ? "ES" : idi.toUpperCase();
Código :
// En caso de duda, español! default : idioma = "ES"; };
Dano :
Código :
private var numDias:Array = new Array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
Dano :
Código :
Fecha() {
// Creamos el objeto Date
super(arguments);
// Seteamos el idioma, por defecto ESPAÑOL
setIdioma("ES");
};
Dano :
Código :
idioma= (!idioma) ? "ES" : idi.toUpperCase();
Código :
// En caso de duda, español! default : idioma = "ES"; };
Dano :
Código :
Fecha.getDaysOfMont();