16 enero 2012

Mostrar nombre de mes en español en PHP

Les paso una función cortita que armé para mostrar el nombre del mes en PHP, sin utilizar arrays ni cosas raras.
Utiliza funciones nativas de PHP.


function nombremes($mes){
setlocale(LC_TIME, 'spanish');
$nombre=strftime("%B",mktime(0, 0, 0, $mes, 1, 2000));
return $nombre;
}


El nucleo es la función strftime que utilizamos con 2 parametros: el primero es el formato en que quiero que me devuelva la fecha y el 2do es la fecha en si (en formato TIMESTAMP por eso la armamos con mktime) que sino lo pasamos toma la fecha actual.  En este caso pongo el dia en 1 y el año en 2000 ya que no los voy a utilizar.

El setlocale es importante porque selecciona los locales de fecha y hora en "spanish", sino saldrian los nombres de los dias y meses en ingles.

El uso de la función es muy simple. Ej:

$mes=nombremes(8);
echo $mes; //devuelve "agosto"

o algo más simple: echo nombremes(8) devuelve "agosto".

Espero les sirva, ya que en la mayoría de las webs encontré ejemplos mucho mas complicados con arrays y otros métodos más largos y complicados. Si en vez del mes quieren el día solo deben cambiar el %B por %A para el día completo y por %a para el día con 3 letras y luego cambiar la ubicación de la variable $mes (y cambiarle el nombre para que quede entendible).
Pueden ampliar la función para que devuelva el mes o el día según el parámetro pasado, se los dejo como ejercicio.



20 comentarios:

Anónimo dijo...

Excelente. Me funciono. Gracias.

Anónimo dijo...

Hola
Gracias, me funcionó

Jorge Ernesto Avila dijo...

Genial, también me funcionó =), muchas gracias.

Sades dijo...

Yo cambie un poco el script a

setlocale(LC_TIME, 'es_ES');

es mas compatible el es_ES que la palabra spanish en mi server no funciona con solo spanish pero si con la variabel global del idioma es_ES

Anónimo dijo...

Gracias :)

Tricky Silence dijo...

Muchas gracias!

Anónimo dijo...

gracias!!

Anónimo dijo...

Si no tengo internet no sirve verdad??

Unknown dijo...

Muchas gracias, me saco de un apuro, necesitaba algo así de urgencia :)

Rafa Vega dijo...

Excelente, funciona muy bien, gracias!!

Maxi dijo...

Muchas gracias, aduvo perfecto

trabajo de informatica dijo...

me funciona pero me sale un error que dice mktime() expects parameter 4 to be long, array given in...
no se si depronto me puedas ayudar

Unknown dijo...

creo que es mejor algo como esto..
sin problemas con el LOCALE, sin problemas con mktime ni nada y mas rápido..
function nombremes($mes){
$mes = array('enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre');
return $mes[date('m')-1];
}

Unknown dijo...

En mi caso funciono con:
setlocale(LC_TIME, 'es_ES.UTF-8');

Nacho dijo...

Muchas gracias, me funcionó muy bien.

Anónimo dijo...

Y sigue funcionando en 2018

Anónimo dijo...

Muy bueno !!!

Anónimo dijo...

funciona bien. buen aporte (y)

Cristian Huarcaya dijo...

Para que inicie con mayuscula puedes agregar ucfirst($nombre)

private static function nombreMes($mes) {
setlocale(LC_TIME, 'spanish');
$nombre=strftime("%B",mktime(0, 0, 0, $mes, 1, 2000));
$nombre_mes = ucfirst($nombre);
return $nombre_mes;
}

Wilmer P. Silva dijo...

Gracias, vamos a ver como funciona!