PHP - Formato de fechas segun el pais
Cuantas veces no se han visto la necesidad de desplegar la fecha actual en su sitio a ver a ver, quien dijo yo?
El poner la fecha actual en una pagina Web es ago muy común y existen diferentas maneras de hacerlo, puede ser con JavaScript, con PHP o con cualquier otro lenguaje de programación para Web.
Algunos lenguajes te permiten llamar una función que te regresa la fecha formateada de acuerdo a un patrón de caracteres o cadena de control, los formatos mas usados (o al menos los que yo he visto) son los siguientes:
- mm/dd/yyyy
- mm-dd-yyyy
- dd/mm/aaaa
- dd-mm-aaaa
- yyyy-mm-dd
Si en mi sitio Web yo quisiese desplegar una fecha con alguno de los formatos antes mencionados podría utilizar algunas de las funciones que PHP no ofrece por ejemplo
- getdate ( ) - la cual nos regresa la fecha y la hora completa en un arreglo de asociación y
- date ( ) – La cual nos formatea una fecha, esta fecha puede ser especificada por medio de un valor entero que representa el Timestamp o si de plano lo ignoramos formatea la fecha y hora actual del servidor.
Hasta ahora todo bien no hay problema solo tengo que decidir el tipo de formato que le voy a pasar a date() para mostrar la fecha y listo la fecha es mostrada.
Pero que pasa cuando como parte de nuestros requerimientos tenemos que mostrar la fecha en el siguiente formato “Hoy es 29 de Enero del 2006”. En la MADRE y ahora quen podra ayudarnos. Y como nunca falta un buen samaritano ( si ese guey que se cree mas listo que tu o sea un hijo del dueño cualquiera ) este guey te dice ---con la misma función date la puedes hacer solo tienes que pasarle la cadena de formateo adecuada. A lo que le contestas –si guey ya se !!!! no estoy tan pendejo el pedo es que este es un portal/sitio Web para usuarios de habla hispana o sea para usuarios que no ladran ingles. a lo que el te contesta –pos has una función que te permita hacer la traducción nomas agarra el mes y sustitúyelo por la cadena en español y lo mismo con el día de la semana.
A quien no le ha pasado? todo mundo conocemos al menos a un hijo del dueño o segundo hijo de dios, o al menos a un hijo de la chingada. Bueno la solucion que dio este hijo de la chingada (digo del dueño) es valida no muy elegante pero valida al fin
Pero que pasa si tienes que soportar otros países que no hablan español como Canadá (el país no la zapatería) que sus idiomas oficiales son Francés e Ingles, como que la cosa se complica porque si sigues el método descrito por el hijo del dueño acabaras teniendo una función por especifica por cada lenguaje algo que se te puede convertir en un mounstro a la hora de mantener el codigo.
Pero existe otra opción una más limpia y mas localizable y esto es usar un par de funciones de PHP que nos van a formatear nuestra cadena de fecha igualito que la funcion date pero con el lenguaje apropiado.
Estas funciones son setlocale() y strftime() la primera nos sirve para especificar la el locale (país o algo así) y la otra para formatear una fecha usando del locale especificado Aquí esta el ejemplo
function MostrarFecha ( ) {
setlocale ( LC_TIME, 'spanish' );
return strftime("Hoy es %A %d de %B del %Y");
}
Ahora la pregunta es como le hago para saber el locale del usuario bueno existen diferentes formas desde dejar que el usuario lo configure en su perfil hasta obtener el locale de la PC donde se ejecuta el navegador y mandar ese locale en el query string. ahora si que este es su perro y ustedes bañenlo. o sea para los que no me entendieron es su tarea.
El manual de PHP para setlocale() y strftime()