Foros del Web » Programando para Internet » PHP »

APORTE Comvertir una fecha MySQL a español

Estas en el tema de APORTE Comvertir una fecha MySQL a español en el foro de PHP en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 02/04/2010, 20:07
Avatar de Alheran  
Fecha de Ingreso: septiembre-2009
Mensajes: 100
Antigüedad: 14 años, 6 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
  #2 (permalink)  
Antiguo 02/04/2010, 20:11
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 3 meses
Puntos: 16
Respuesta: APORTE Comvertir una fecha MySQL a español

Buen aporte ;)
  #3 (permalink)  
Antiguo 02/04/2010, 20:36
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: APORTE Comvertir una fecha MySQL a español

Gracias por el aporte. Un consejo es bueno usar las funciones de Date/Time o la clase DateTime, por ejemplo, esto hace lo mismo que tu haces
Código PHP:
Ver original
  1. <?php
  2. setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
  3. $d = "2010-03-03";
  4. $fecha = strftime("%d de %B de %Y", strtotime($d));
  5. echo $fecha;
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 02/04/2010, 20:55
Avatar de Alheran  
Fecha de Ingreso: septiembre-2009
Mensajes: 100
Antigüedad: 14 años, 6 meses
Puntos: 6
Respuesta: APORTE Comvertir una fecha MySQL a español

Código PHP:
Ver original
  1. <?php
  2. setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
  3. $d = "2010-03-03";
  4. $fecha = strftime("%d de %B de %Y", strtotime($d));
  5. echo $fecha;

Este codigo solo me regresa la fecha tal cual, no me regresa el dia de la semana y el numero del dia me lo regresa con un 0 adicional en los numeros antes del 10. Y justo eso es lo que no me gustaba..

La funcion setlocale no la he trabajado. Asi que. Hay manera de hacer lo que hace la mia con setlocale? que me arroje ademas el dia de la semana lunes martes miercoles etc. y que me de el dia del mes sin ese antiestetico "0"?

Gracias

AÑADO INFORMACION .. tristemente para mi aporte, felizmente para el conocimiento y crecimiento. Si se puede hacer con lo que me comentas. Y aqui esta el codigo que arroja exactamente lo que yo mando. Si algun aporte tiene mi codigo es que los noveles podrian ocuparlo para cambiar el array en lugar de estudiar todos los %a de setlocale, pero eso implicaria un retroceso.

Aun asi, todavia me falta poder lanzar desde una fecha por separado el dia, el mes y demas para darles estilo por separado. Y mejor aun desde una funcion. Para reducir codigo.

Gracias nuevamente. Aqui el codigo corregido
Código PHP:
Ver original
  1. <?php
  2. setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
  3. $d = "2010-03-03";
  4. $fecha = strftime("%A, %e de %B de %Y", strtotime($d));
  5. echo $fecha;
  6. ?>

Última edición por Alheran; 02/04/2010 a las 21:12
  #5 (permalink)  
Antiguo 02/04/2010, 21:10
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: APORTE Comvertir una fecha MySQL a español

Así lo puedes ver
Código PHP:
Ver original
  1. <?php
  2. setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
  3. $d = "2010-03-03";
  4. $fecha = strftime("%A %e de %B de %Y", strtotime($d));
  5. echo $fecha;
Nota: no me salio la fecha cuando le indicaba %e, pero una forma de lograr que todo se vea como desees es dividirlo y luego concatenar la información. Ejemplo
Código PHP:
Ver original
  1. <?php
  2. setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
  3. $d = "2010-03-03";
  4. $diaSemana = strftime("%A", strtotime($d));
  5. $diaNumero = strftime("%d", strtotime($d));
  6. $restoFecha = strftime(" de %B de %Y", strtotime($d));
  7. echo $diaSemana . " " . (int)$diaNumero . $restoFecha;
Por último, pasa por el manual para que veas los demás parametros strftime.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 02/04/2010, 21:19
Avatar de Alheran  
Fecha de Ingreso: septiembre-2009
Mensajes: 100
Antigüedad: 14 años, 6 meses
Puntos: 6
Respuesta: APORTE Comvertir una fecha MySQL a español

Ya te escribi algo mas arriba, pero creo que escribimos al mismo tiempo =)

Y como dije.. te agradezco mucho, me pusiste triste el aporte je je, pero me alegraste el conocimiento y el crecimiento. Esta funcion tuya es mucho mejor, ademas estoy leyendo acerca de ella y no solo se puede hacer eso, si no mucho mas. Como especificar la hora en diferentes formas asi como los dias. Hasta llamar un año biciesto =D.

Lo que si es cierto es que este mensaje quedara bien guardado, pues en google no encontre algo como lo que dices. Ahora que lo busco en google con el nombre de la funcion encontre mucha info. Pero normalmente cuando uno tiene una duda se va a cosas mas sencillas como "fecha de mysql al español".

Espero que este mensaje lo lean muchos y lean el aporte que nos has hecho. Y que aprendan aquellos que no lo han hecho estas maravillosas funciones y con eso amaremos cada vez mas el php jeje

Gracias.
  #7 (permalink)  
Antiguo 02/04/2010, 21:43
Avatar de Alheran  
Fecha de Ingreso: septiembre-2009
Mensajes: 100
Antigüedad: 14 años, 6 meses
Puntos: 6
Respuesta: APORTE Comvertir una fecha MySQL a español

abimaelrc haber si puedes ayudarme. Ahora implemente el nuevo codigo que salio de esto, pero... en miercoles me pone algo como: mi?rcoles.

Los acentos no me los respeta, pero tengo utf-8 para toda la web. ASi esta programada. Hay manera de cambiar esto para este dato? para que me respete los acentos?
  #8 (permalink)  
Antiguo 02/04/2010, 21:45
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: APORTE Comvertir una fecha MySQL a español

Trata la función utf8_encode y utf8_decode.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 02/04/2010, 21:52
Avatar de Alheran  
Fecha de Ingreso: septiembre-2009
Mensajes: 100
Antigüedad: 14 años, 6 meses
Puntos: 6
Respuesta: APORTE Comvertir una fecha MySQL a español

No fue necesaria la funcion urf8_encode, lo hice desde la declaracion del setlocale

Aqui esta el codigo final, gracias al aporte de abimaelrc, mi tiempo y el buen google je je. Ya quedo corregido lo de los acentos, el 0 que aparecia y demas. Este codigo implica los datos por separado para darles estilo.

Código PHP:
Ver original
  1. <?php
  2. setlocale(LC_ALL,"es_ES.utf8","es_ES","esp");
  3. $fecha = "2010-03-02";
  4. $diasemana = strftime("%A", strtotime($fecha));
  5. $diames = strftime("%e", strtotime($fecha));
  6. $mes = strftime("%B", strtotime($fecha));
  7. $anio = strftime("%Y", strtotime($fecha));
  8. ?>
  9.     <div class="fecha">
  10.     <span class="diasemana"><?php echo $diasemana ?>,
  11.     <span class="diames"><?php echo $diames ?> de
  12.     <span class="mes"><?php echo $mes ?> de
  13.     <span class="anio"><?php echo $anio ?>
  14.     </div>

Y aqui una pagina con todos los codigos para dar formato a la fecha.


En dicha pagina aparece un post, navegando mas abajo aparece casi al final una tabla con todos los codigos para dar formato.
  #10 (permalink)  
Antiguo 22/01/2013, 21:45
 
Fecha de Ingreso: agosto-2012
Mensajes: 16
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: APORTE Comvertir una fecha MySQL a español

Agradecer no cuesta nada exelente aporte !!
  #11 (permalink)  
Antiguo 27/04/2016, 09:11
 
Fecha de Ingreso: octubre-2011
Ubicación: Niquitao
Mensajes: 28
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: APORTE Comvertir una fecha MySQL a español

Hola a mi me dio este formato en consulta de mysql sin usar PHP

Código MySQL:
Ver original
  1. SELECT date_format('1987-12-03',CONCAT(CONCAT(ELT(WEEKDAY('1987-12-03') + 1, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sábado', 'Domingo')),', %d de ',CONCAT(ELT(MONTH('1987-12-03'), 'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre')),' de %Y')) AS fecha;

Y el resultado se vería así:
Código MySQL:
Ver original
  1. fecha
  2.  
  3. Jueves, 03 de diciembre de 1987

Mira si te sirve así....

Última edición por elpropiopato23; 27/04/2016 a las 09:14 Razón: Me falto poner el resultado

Etiquetas: comvertir, español, mysql, fechas, aportes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:04.