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:

  1. Anónimo11:58 a.m.

    Excelente. Me funciono. Gracias.

    ResponderBorrar
  2. Anónimo1:19 p.m.

    Hola
    Gracias, me funcionó

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

    ResponderBorrar
  4. 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

    ResponderBorrar
  5. Anónimo12:50 p.m.

    Gracias :)

    ResponderBorrar
  6. Anónimo5:09 p.m.

    gracias!!

    ResponderBorrar
  7. Anónimo6:52 p.m.

    Si no tengo internet no sirve verdad??

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

    ResponderBorrar
  9. Excelente, funciona muy bien, gracias!!

    ResponderBorrar
  10. Muchas gracias, aduvo perfecto

    ResponderBorrar
  11. 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

    ResponderBorrar
  12. 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];
    }

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

    ResponderBorrar
  14. Muchas gracias, me funcionó muy bien.

    ResponderBorrar
  15. Anónimo8:32 p.m.

    Y sigue funcionando en 2018

    ResponderBorrar
  16. Anónimo2:40 p.m.

    Muy bueno !!!

    ResponderBorrar
  17. Anónimo5:07 p.m.

    funciona bien. buen aporte (y)

    ResponderBorrar
  18. 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;
    }

    ResponderBorrar
  19. Gracias, vamos a ver como funciona!

    ResponderBorrar