Foros del Web » Programando para Internet » PHP »

[APORTE]: Convertir fechas desde distintos formatos

Estas en el tema de [APORTE]: Convertir fechas desde distintos formatos en el foro de PHP en Foros del Web. Hola foreros, aquí les dejo un pequeńo aporte, una función para convertir fechas desde cualquier formato. Dado que la función utiliza la classe DateTime, si ...
  #1 (permalink)  
Antiguo 21/11/2011, 02:00
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
[APORTE]: Convertir fechas desde distintos formatos

Hola foreros, aquí les dejo un pequeńo aporte, una función para convertir fechas desde cualquier formato. Dado que la función utiliza la classe DateTime, si se utilzan nombres de meses o dias se requiere una traducción. En este ejemplo, sólo he traducido meses y dias, si queréis utilizar algún formato no previsto en esta función se debe agregar un array con las traducciones requeridas. Espero que a alguien le sirva, saludos!

Código PHP:
Ver original
  1. <?php
  2.  
  3. /**
  4.  * Devuelve una fecha formateada a partir de otra fecha con formato.
  5.  * Dado que esta función utiliza la classe DateTime (que no utiliza la configuración regional),
  6.  * es necesario hacer una traducción de los posibles nombres de meses y dias.
  7.  * @author repara2 [email protected]
  8.  * @since 16/11/2011la fecha a convertir
  9.  * @param string $originalFormat el formato de entrada de la fecha dada
  10.  * @param string $outputFormat el formato deseado de salida
  11.  * @return string $return, la fecha formateada o false en caso de error
  12.  */
  13. function date2date($date, $originalFormat, $outputFormat)
  14. {
  15.     $newDate = DateTime::createFromFormat($originalFormat, $date);
  16.     //Class DateTime no maneja configuración local, hay que hacer una traducción manual
  17.     $months = array(
  18.         "January" => "Enero",
  19.         "February" => "Febrero",
  20.         "March" => "Marzo",
  21.         "April" => "Abril",
  22.         "May" => "Mayo",
  23.         "June" => "Junio",
  24.         "July" => "Julio",
  25.         "August" => "Agosto",
  26.         "September" => "Septiembre",
  27.         "October" => "Octubre",
  28.         "November" => "Noviembre",
  29.         "December" => "Diciembre"        
  30.         );
  31.         //Class DateTime no maneja configuración local, hay que hacer una traducción manual
  32.         $days = array(
  33.         "Monday" => "Lunes",
  34.         "Tuesday" => "Martes",
  35.         "Wednesday" => "Miércoles",
  36.         "Thursday" => "Jueves",
  37.         "Friday" => "Viernes",
  38.         "Saturday" => "Sábado",
  39.         "Sunday" => "Domingo"        
  40.         );
  41.  
  42.         $days_full = array(
  43.         "Mon" => "Lunes",
  44.         "Tue" => "Martes",
  45.         "Wedn" => "Miércoles",
  46.         "Thu" => "Jueves",
  47.         "Fri" => "Viernes",
  48.         "Sat" => "Sábado",
  49.         "Sun" => "Domingo"        
  50.         );
  51.  
  52.         $val = $newDate->format($outputFormat);
  53.         foreach($months as $eng => $esp) {
  54.             $return = str_replace($eng, $esp, $val);
  55.             if($return!=$val) break;
  56.         }
  57.         foreach($days as $eng => $esp) {
  58.             $return = str_replace($eng, $esp, $val);
  59.             if($return!=$val) break;
  60.         }
  61.         foreach($days_full as $eng => $esp) {
  62.             $return = str_replace($eng, $esp, $val);
  63.             if($return!=$val) break;
  64.         }
  65.  
  66.         return $return;
  67. }
  68.  
  69. //Demo, algunas fechas y formatos:
  70. $fechas = array(
  71. "10/12/2001" => "d/m/Y",
  72. "2001.12.10" => "Y.m.d",
  73. "December 10, 2001" => "F d, Y",
  74. "10-12-2001" => "d-m-Y"
  75. );
  76. //Todas las fechas las voy a pasar a este formato
  77. $output = "D d, M Y";
  78.  
  79. //traducción
  80. foreach ($fechas as $date => $format)
  81. {
  82.     echo "<h1>Antes: $date, ahora es: ".date2date($date, $format, $output)."</h1>";
  83. }
  84.  
  85. ?>
__________________
Fere libenter homines, id quod volunt, credunt.
  #2 (permalink)  
Antiguo 21/11/2011, 03:24
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 4 meses
Puntos: 165
Respuesta: [APORTE]: Convertir fechas desde distintos formatos

Y si la app es multidioma?

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #3 (permalink)  
Antiguo 21/11/2011, 03:27
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: [APORTE]: Convertir fechas desde distintos formatos

Si tienes una app multidioma puedes pasar el idioma como parámetro a la función para hacer la traducción, o mejor aún, puedes pasar el array con la traducción que necesites. Habría que ver tu caso concreto pero dado que el problema es solamente la traducción de los dias y los meses, también se puede utilizar alguna clase y función de diccionario. Salu2
__________________
Fere libenter homines, id quod volunt, credunt.

Etiquetas: distintos, formatos
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




La zona horaria es GMT -6. Ahora son las 11:43.