Tema: Formato de fechas
Pregunta: Necesito crear diferentes formatos de fechas para cada uno de los idiomas de mi sitio, ya que no es lo mismo el formato ingles que el español, es posible definir esto en la configuración del idioma?
Respuesta: Pondré un ejemplo con 3 tipos de fechas (corta, media y larga) que dice ser así:
Código PHP:
<?
/***
la var $setting puede estar seteada para un idioma (ej, español.php) determinado, pudiendo tener para cada idioma diferentes formatos
***/
/********=))==))==))=********
EN EL ARCHIVO PHP DE IDIOMAS:
********=))==))==))=********/
/***
Formato de fechas validos, corto, medio y largo, pueden personalizar el suyo de así necesitarlo:
***/
$setting['FORMATO_FECHA_CORTO'] = 'd/m/Y';
$setting['FORMATO_FECHA_MEDIO'] = '%mes% %de% Y';
$setting['FORMATO_FECHA_LARGO'] = '%dia% %de% %mes% %de% Y'; // se le pueden poner cosas como: \H\o\y \e\s %dia%, o agregar un setting tal cual lo es "de" que se llame "hoy" y otro "es". Además de agregar cualquier comodín válido de www.php.net/date
/***
Para cada caso del ejemplo tengo dias, meses y el texto "de"
***/
$setting['DIAS'] = array('Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado');
$setting['MESES'] = array('positionZero','Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre');
$setting['DE'] = 'de';
/********=))==))==))=********
EN EL ARCHIVO PHP DE FUNCIONES:
********=))==))==))=********/
/**
Function formatearFechaIdiomas
In: timestamp, variable setting, formato (corto, medio, largo)
**/
function formatearFechaIdiomas( $time, &$setting, $formato = 'corto'){
$no = array( '%dia%', '%mes%', '%de%' ); #Esto es lo que escribimos en el setting, para que sea más legible para el administrador del sitio. Se pueden agregar tantas variantes se crean necesarias, tendiendo su posición declarada en el array $setting
$si = array( '%\d\i\a%', '%\m\e\s%', '%\d\e%' ); #No se le pude pasar a date cosas como "mes", ya que las tres letras son valores reservados, hay que escaparlos.
$traduccion = array( $setting['DIAS'][date("w",$time)], $setting['MESES'][date("n",$time)], $setting['DE'] ); #Y esta es la traducción de cada elemento
#FORMATO CORTO
if( $formato == 'corto' ) return date( $setting['FORMATO_FECHA_CORTO'], $time);
#FORMATO MEDIO
if( $formato == 'medio' ){
$setting['FORMATO_FECHA_MEDIO'] = str_replace( $no, $si, $setting['FORMATO_FECHA_MEDIO'] );
return str_replace( $no, $traduccion, date( $setting['FORMATO_FECHA_MEDIO'], $time) );
}
#FORMATO LARGO
if( $formato == 'largo' ){
$setting['FORMATO_FECHA_LARGO'] = str_replace( $no, $si, $setting['FORMATO_FECHA_LARGO'] );
return str_replace( $no, $traduccion, date( $setting['FORMATO_FECHA_LARGO'], $time) );
}
return FALSE;
}
/********=))==))==))=********
EJEMPLO DE USO, la parte simple:
********=))==))==))=********/
echo formatearFechaIdiomas( time(), $setting, 'corto') . "<hr>"; #Out: 12/6/2008
echo formatearFechaIdiomas( time(), $setting, 'medio') . "<hr>"; #Out: Junio de 2008
echo formatearFechaIdiomas( time(), $setting, 'largo') . "<hr>"; #Out: Domingo 12 de Junio de 2008
?>