Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2011, 02:00
Avatar de repara2
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.