ElTicus.com

Programación, lenguajes y recursos para programadores

Recurso no clasificado
Como convertir una fecha de Lenguaje Natural a tipo DATE
C贸digo fuente en PHP
Publicado por jl Fecha: 2007-11-15 23:05:16 Idioma: Espa帽ol Tipo de documento: C贸digo fuente

Como convertir una fecha de Lenguaje Natural a tipo DATE

Utilizando manejo de cadenas en PHP, se trata de convertir una fecha dada como cadena en formato LongDate al formato admitido por MySQL YYYY-MM-DD.

Comparto este c贸digo para aquellos que pudieran tener un problema similar.

Me pasaron una base de datos que conten铆a un campo fecha, pero dicho campo fecha era en realidad un campo de tipo Texto en donde hab铆an capturado la fecha como una cadena y yo lo necesitaba de tipo Fecha obligatoriamente.

Las fechas originalmente est谩n en el siguiente formato:


Lunes, 10 de Febrero de 2001
Mi茅rcoles, 24 de Diciembre de 2006
Jueves, 3 de Agosto de 1998
Martes, 6 de Enero de 2003
...

Procedimiento

En primer lugar hice una revisi贸n de la informaci贸n verificando que el formato de las fechas es consistente, es decir que no hay errores de ortograf铆a ni variaciones en el formato, todas las fechas cumplen con el formato: DIA[coma] NUMERO[ de ]MES[ de ]A脩O
Lo cual facilit贸 bastante la conversi贸n ya que si ubiera habido variaciones tendr铆a que uniformarlo primero.


Condiciones iniciales

Tengo una tabla en mi base de datos de nombre DATA1 y entre sus campos se encuentra el ID que es mi Campo Llave y FECHA que es la que tiene las caracter铆sticas que mencion茅.


<?php

$server = "localhost";
$user = "root";
$pass = "";
$database = "test";

$link = mysql_connect($server,$user,$pass);
mysql_select_db($database,$link) or die(mysql_error());


//Comienzo creando una tabla para ver el resultado en pantalla
echo "<table border=1>"; 

$sql="SELECT id, fecha FROM data1 order by id limit 0,10000";
$query = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($query))
{
 
 $fechacad=$row[1];
 if("$fechacad"!="") //<-- verifico que el campo fecha no est茅 vac铆o
 {
   //Lo paso a may煤sculas para evitar las "altas y bajas"
   $fechacad=strtoupper($fechacad);
   
   //Reemplazo los [Nombres del Mes] por el n煤mero correspondiente:   
   $fechacad=str_replace("ENERO",'01',$fechacad);
   $fechacad=str_replace("FEBRERO",'02',$fechacad);
   $fechacad=str_replace("MARZO",'03',$fechacad);
   $fechacad=str_replace("ABRIL",'04',$fechacad);
   $fechacad=str_replace("MAYO",'05',$fechacad);
   $fechacad=str_replace("JUNIO",'06',$fechacad);
   $fechacad=str_replace("JULIO",'07',$fechacad);
   $fechacad=str_replace("AGOSTO",'08',$fechacad);
   $fechacad=str_replace("SEPTIEMBRE",'09',$fechacad);
   $fechacad=str_replace("OCTUBRE",'10',$fechacad);
   $fechacad=str_replace("NOVIEMBRE",'11',$fechacad);
   $fechacad=str_replace("DICIEMBRE",'12',$fechacad);
   
   //Suprimo los nombres del [Nombre del D铆a] ya que no me resulta relevante:
   $fechacad=str_replace("LUNES, ",'',$fechacad);
   $fechacad=str_replace("MARTES, ",'',$fechacad);
   $fechacad=str_replace("MIERCOLES, ",'',$fechacad);
   $fechacad=str_replace("JUEVES, ",'',$fechacad);
   $fechacad=str_replace("VIERNES, ",'',$fechacad);
   $fechacad=str_replace("SABADO, ",'',$fechacad);
   $fechacad=str_replace("DOMINGO, ",'',$fechacad);
   
   //Suprimo reemplazo los [ de ]'s por diagonales (puede ser cualquier otro caracter):
   $fechacad=str_replace(" DE ",'/',$fechacad);
   
    /*---------------------------------------
     En este momento la fecha ya tiene el formato:
                   21/03/2007
                   
     Lo cual es ya un formato de fecha aceptable 
     en algunos sistemas, pero no en MySQL.
    -----------------------------------------*/

   
   // Con una expresi贸n regular descompongo la fecha en sus elementos
   if(ereg("([0-9]{1,2})/([0-9]{2})/([0-9]{4})",$fechacad,$res))
   {
     /*--------------------------------------
       En este momento la fecha se dividi贸 en:
       $res[1] = 21
       $res[2] = 03
       $res[3] = 2007
       
       As铆q ue simplemente se vuelve a armar la cadena 
       con el acomodo deseado que es: 2007-03-21
     ----------------------------------------*/

     $aux="{$res[3]}-{$res[2]}-{$res[1]}";
     
     // Muestro en pantalla el antes y el despu茅s:
     echo "<tr><td> {$row[1]} </td><td> $aux </td></tr>\n";   
     
     /* --------------------------------------
     
     // El siguiente c贸digo es para actualizar 
     // la informaci贸n en la base de datos:
     // (se recomienda omitirlo en las primeras corridas)
     
     $sql2="update data1 set fecha='$aux' where id={$row[0]}";
     mysql_query($sql2) or die("ERROR:". mysql_error());
     
     ----------------------------------------*/

   }
   else
   {
    /* En caso de que el formato de fecha no coincida con 
       el esperado en la expresi贸n regular marcamos el error 
       y detenemos el programa. */
    
    die("<tr><td>  Error con {$row[1]} </td></tr>");
   }
 }   
}

?>

Importante: Puse toda la documentaci贸n como comentarios dentro del c贸digo fuente, les recomiendo leerlo con cuidado y entenderlo antes de utilizarlo con una base real.

Y como siempre: NO OLVIDEN RESPALDAR PRIMERO.

Despu茅s de haber ejecutado el proceso, me met铆 al PHPMYADMIN y cambi茅 el tipo de dato a Tipo DATE y ya lo pude usar como una fecha est谩ndar.




Nadie ha puesto ning鷑 comentario todav韆


Haz un comentario sobre este tema
Nombre email (no se muestra)
comentario:
Escribe las 2 letras que ves aqu: Imagen anti-spam =




No hay comentarios

Art韈ulos relacionados:
Recurso no clasificado Como imprimir la fecha en espa帽ol utilizando PHP aunque el idioma del servidor sea el ingl茅s. Tip Como corregir la fecha de mi servidor si 茅ste se encuentra en un uso horario diferente al mio Recurso no clasificado Para imprimir la fecha en espa帽ol utilizando PHP independientemente del lenguaje del servidor (Utilizando ARRAYS)