Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/04/2010, 20:07
Avatar de Alheran
Alheran
 
Fecha de Ingreso: septiembre-2009
Mensajes: 100
Antigüedad: 9 años, 8 meses
Puntos: 6
APORTE Comvertir una fecha MySQL a español

Aporto una funcion que lo que hace es convertir la siguiente fecha:
2010-04-02
A el siguiente texto:
viernes 2 de abril de 2010

Hola amigos, hace mucho tiempo que vengo trabajando con php y mysql (solo 2 años jaja, pero cuando te apasionas sientes que es mucho)

Y como chico en pubertad que se enfrenta a las cosas ineludibles, me encontre con el fantasma de las fechas de MySQL, que no solo nos marcan la fecha al reves si no que ademas son numeros que un usuario estandar no quiere tratar de desifrar.

Como buen vago investigue en google si habia algo parecido pero no encontre nada. No digo que no exista, pero yo al menos no tube suerte. Lo maximo que vi fueron funciones que solo giran los numeros, otros que solo convierten el mes numerico en letra, otros que hacian ambas cosas pero con codigos demasiado largos .

Entonces me di a la tarea de crear la mia. Asi que aqui va mi aporte en agradecimiento de todo o que he aprendido de ustedes amigos y camaradas.

Aqui el codigo de la funcion

Código PHP:
Ver original
  1. function fechaesp($date) {
  2.     $dia = explode("-", $date, 3);
  3.     $year = $dia[0];
  4.     $month = (string)(int)$dia[1];
  5.     $day = (string)(int)$dia[2];
  6.    
  7.     $dias = array("domingo","lunes","martes","miércoles" ,"jueves","viernes","sábado");
  8.     $tomadia = $dias[intval((date("w",mktime(0,0,0,$month,$day,$year))))];
  9.  
  10.     $meses = array("", "enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre");
  11.    
  12.     return $tomadia.", ".$day." de ".$meses[$month]." de ".$year;
  13. }

Y para imprimir la fecha bastara hacer lo siguiente:
Código PHP:
Ver original
  1. $date = "2010-04-02";
  2. echo fechaesp($date);
Igual funcionaria si solo colocaramos en vez de la variable $date la pura fecha, pero ocupo este ejemplo ya que se supone el problema vendria de una fecha obtenida desde MySQL, entonces esta casi siempre vendra desde una variable

Se le pueden hacer muchas variaciones dependiendo las necesidades que tengamos, como por ejemplo cuando queremos darle un estilo diferente a cada cosa nos seria util tener por separado el dia el mes y el años para poder asignar estilos diferentes.

Aqui esta el codigo con la breve modificación. Yo lo hago con un switch, igual podria funcionar talvez un array, en todo caso creo que el código es sencillo y ligero.

Código PHP:
Ver original
  1. function fechaesp($date, $opcion) {
  2.     $dia = explode("-", $date, 3);
  3.     $year = $dia[0];
  4.     $month = (string)(int)$dia[1];
  5.     $day = (string)(int)$dia[2];
  6.    
  7.     $dias = array("domingo","lunes","martes","miércoles" ,"jueves","viernes","sábado");
  8.     $tomadia = $dias[intval((date("w",mktime(0,0,0,$month,$day,$year))))];
  9.  
  10.     $meses = array("", "enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre");
  11.    
  12.     switch ($opcion) {
  13.     case "diasemana":
  14.     echo $tomadia;
  15.     break;
  16.     case "diames":
  17.     echo $day;
  18.     break;
  19.     case "mes":
  20.     echo $meses[$month];
  21.     break;
  22.     case "anio":
  23.     echo $year;
  24.     break;
  25.     default:
  26.     echo "Nada";
  27.     }
  28. }

Y en este caso para dar salida a los datos contamos con la llamada a la funcion pero esta vez tenemos que mandar 2 argumentos.

fechaesp(Nuestra_fecha, Argumento_tipo_dato);

Nada mejor que un ejemplo para mostrar el resultado.
Código PHP:
Ver original
  1. $date = "2010-04-02";
  2. echo fechaesp($date, "diasemana"); // para imprimir el dia de la semana
  3. echo fechaesp($date, "diames"); // para imprimir el dia del mes
  4. echo fechaesp($date, "mes"); // para imprimir el mes
  5. echo fechaesp($date, "anio"); // para imprimir el año

Tambien se pueden modificar los array de la funcion para que en vez de que imprima lunes, martes, miercoles... imprima lun, mar, mier, etc. Igual por si alguien quiere colocar las iniciales de los nombres de la semana en mayusculas, cabe mencionar que lo correcto es colocarlos en minusculas.

Bueno, pues este es mi pequeño aporte a la comunidad, estoy seguro que les servira de mucho. Es muy corto y facil de implementar.

Pido una disculpa por tantas faltas de ortografia, pero ahora mismo tengo que terminar un proyecto. Con tiempo regresare a corregirlas