entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Obtener el nombre de los meses anteriores con php

Quiero mostrar desde el mes actual hacia detrás, los nombres de los meses con php.
El problema creo que empieza cuando llego a Enero de 2014 y después empieza diciembre de 2013.

Estoy haciendo lo siguiente:

$meses = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"); 
$contador = 1;
$mesAnterior = "";

Y ahora tengo un bucle while que me va mostrando los datos descendentemente y dentro tengo lo siguiente:

<?php echo $meses[date('n')-$contador]; ?>

Desde este mes Julio, Junio, etc hacia detrás bien, excepto cuando llega a Enero que no aparece, ni los demás.
¿Algo que esté haciendo mal?

0voto

ankeorum comentado

De dónde viene date('n') ??

0voto

danielreales7 comentado

http://www.php.net/manual/es/function.date.php ahí viene, me devuelve del 1 al 12 los meses.

2 Respuestas

1voto

carlossevi Puntos63580

Una solución sencilla pero poco elegante es partir del siguiente array:

$meses = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre","Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"); 

Y en lugar de empezar a contar en n, hacerlo en 12+n. Por mucho que restes no te quedarás sin índices en el array =)

La opción más elegante es controlar dentro del bucle cuando llegas a la posición 1 y cambiarlo por la 13 (al restar queda en 12).

0voto

danielreales7 comentado

Muchas gracias, usé esta forma más sencilla!

2votos

Leonardo-Tadei Puntos227320

Hola Daniel,

los vectores indizados en PHP (y en casi todos los lenguajes) empiezan desde 0. Si debbugueas tu código deberías ver que no estabas viendo el mes correcto, sino el anterior.

Podés solucionarlo declarando también los índices del vector, para que Enero sea el 1:

$meses = array(1 =>"Enero",2=>"Febrero",...

o podés restar uno al mes para que coincida con el vector que arranca de cero:

<?php echo $meses[date('n') -1 -$contador]; ?>

También podés jugar con set_locale(), poner a PHP en español y hacer que date() devuelva los meses en el idioma de Cervantes (el ejemplo está basado en el del manual de PHP, pero da lo mismo para date() ):

setlocale(LC_ALL, 'es_ES');
echo strftime("%A %e %B %Y", mktime(0, 0, 0, 01, 22, 1972));

Esto te devuelve la fecha de mi cumpleaños ;-)

0voto

carlossevi comentado

Qué curioso @Leonardo-Tadei ¿sólo ha sido tu cumpleaños una vez en la historia? jajaja

0voto

Leonardo-Tadei comentado

Ja! Cosas de geografía humana: aca usamos indistintamente "fecha de nacimiento" y "fecha de cumpleaños".

Por cierto, me gusta la forma de "hacer trampas" de tu solución, pero no funciona cuando hay acumulados más de 2 años de datos: es más genérico el if() si llega a 0 o el setlocale() y ejar que el sistema se encargue.

Saludos Carlos! Y acordate de saludarme para mi cumpleaños!!!

0voto

danielreales7 comentado

Gracias por el dato :)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta