Por: _CONEJO + 17.11.2005
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();