Problemas con fecha en Mysql
He conseguido leer un archivo CSV y cargar toda la data que esta en ella a la base de datos, ahora tengo un problema mayor en mi archivo CSV tengo un campo fecha con el formato 'dd/mm/yyyy' pero el mysql tiene como defecto la fecha del formato 'yyyy-mm-dd', con lo cual al terminar la carga de datos todas mis fechas aparecen como '0000-00-00', como puedo hacer para cambiarle el formato de fecha al mysl, porque los archivos son cargados directamente por el ususario mediante una inetrfaz php, les agradecre su ayuda.
Convertir fechas entre MySQL y castellano, en PHP
Un par de funciones que nos permitirán convertir las fechas entre el idioma castellano y el formato MySQL, útiles en el trabajo con fechas en PHP.
Las fechas son uno de esos tÃpicos asuntos que pueden hacer que nos rompamos la cabeza a la hora de programar una página. Razón de ello es que tienen distintos formatos dependiendo del paÃs, del lenguaje de programación o de la base de datos que estemos utilizando.
Cuando utilizamos la tecnologÃa PHP solemos trabajar con la base de datos MySQL. En estos dos sistemas los formatos de fechas cambian sensiblemente, asà que será muy interesante conocer una manera rápida de pasar de un formato de fecha a otro, dependiendo de dónde vamos a utilizar esa fecha. Pues, si trabajamos con MySQL deberemos expresar la fecha de una manera distinta a la que lo harÃamos a la hora de mostrarla en la página para que la entienda fácilmente un lector hispano.
En muchos casos, debemos vérnoslas entre dos tipos de formatos distintos, aunque podrÃa ser peor. Por ejemplo, si la página estuviese en varios idiomas, serÃa importante escribir correctamente las fechas en cada uno de los idiomas.
Dejando temas relacionados con el idioma aparte -concentrándonos tan sólo en el Español-, en nuestras páginas programadas en PHP y con base de datos MySQL, tendremos que trabajar con dos formatos. Por un lado tenemos las fechas en castellano, que tienen el formato dd/mm/aaaa y por otro lado tenemos el formato de MySQL, que tiene la sintaxis aaaa-mm-dd.
Lo más cómodo, tal como vemos nosotros este problema, es crear un par de funciones que conviertan las fechas de un formato a otro. Habrá una función que convertirá la fecha de MySQL a Castellano y otra que lo convierta de Castellano a MySQL.
////////////////////////////////////////////////////
//Convierte fecha de mysql a normal
////////////////////////////////////////////////////
function cambiaf_a_normal($fecha){
ereg( "([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})", $fecha, $mifecha);
$lafecha=$mifecha[3]."/".$mifecha[2]."/".$mifecha[1];
return $lafecha;
}
////////////////////////////////////////////////////
//Convierte fecha de normal a mysql
////////////////////////////////////////////////////
function cambiaf_ a_mysql($fecha){
ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fecha, $mifecha);
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
return $lafecha;
}
Las funciones utilizan expresiones regulares que no hemos visto todavÃa, asà que no vamos a tratar de explicar cómo funcionan, sino que explicaremos cómo utilizarlas.
Mostrar en la página una fecha en castellano
Si tenemos una fecha en formato MySQL y deseamos colocarla en una página haremos algo como sigue.
Suponemos que la fecha está extrayéndose a través de una consulta a la base de datos y la tenemos en una variable llamada $fila->fecha. Además, colocamos la fecha en un campo de formulario.
<input type="text" name="fecha" value="<?echo cambiaf_a_normal($fila->fecha);?>">
Colocar en la base de datos una fecha en formato MySQL
Cuando el usuario nos manda una fecha, por ejemplo, a través de un formulario con un campo como el que acabamos de ver, lógicamente, escribirá la fecha en castellano. Pero nosotros deseamos guardarla en una base de datos en un formato distinto, asà que habremos de convertirla.
Suponemos que tenemos la fecha en una variable llamada $fecha y que está en formato castellano. Además, queremos colocarla en una sentencia SQL que deseamos ejecutar en la base de datos para insertar un registro que contiene, entre otros datos, la fecha que el usuario ha escrito.
mysql_query ("insert into documento (titulo_documento, fecha_documento, cuerpo_documento) values ('$titulo_documento', '" . cambiaf_a_mysql($fecha) . "', '$cuerpo_documento')");
Este documento lo tome de: http://www.desarrolloweb.com/articulos/1280.php?manual=6
Un par de funciones que nos permitirán convertir las fechas entre el idioma castellano y el formato MySQL, útiles en el trabajo con fechas en PHP.
Las fechas son uno de esos tÃpicos asuntos que pueden hacer que nos rompamos la cabeza a la hora de programar una página. Razón de ello es que tienen distintos formatos dependiendo del paÃs, del lenguaje de programación o de la base de datos que estemos utilizando.
Cuando utilizamos la tecnologÃa PHP solemos trabajar con la base de datos MySQL. En estos dos sistemas los formatos de fechas cambian sensiblemente, asà que será muy interesante conocer una manera rápida de pasar de un formato de fecha a otro, dependiendo de dónde vamos a utilizar esa fecha. Pues, si trabajamos con MySQL deberemos expresar la fecha de una manera distinta a la que lo harÃamos a la hora de mostrarla en la página para que la entienda fácilmente un lector hispano.
En muchos casos, debemos vérnoslas entre dos tipos de formatos distintos, aunque podrÃa ser peor. Por ejemplo, si la página estuviese en varios idiomas, serÃa importante escribir correctamente las fechas en cada uno de los idiomas.
Dejando temas relacionados con el idioma aparte -concentrándonos tan sólo en el Español-, en nuestras páginas programadas en PHP y con base de datos MySQL, tendremos que trabajar con dos formatos. Por un lado tenemos las fechas en castellano, que tienen el formato dd/mm/aaaa y por otro lado tenemos el formato de MySQL, que tiene la sintaxis aaaa-mm-dd.
Lo más cómodo, tal como vemos nosotros este problema, es crear un par de funciones que conviertan las fechas de un formato a otro. Habrá una función que convertirá la fecha de MySQL a Castellano y otra que lo convierta de Castellano a MySQL.
////////////////////////////////////////////////////
//Convierte fecha de mysql a normal
////////////////////////////////////////////////////
function cambiaf_a_normal($fecha){
ereg( "([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})", $fecha, $mifecha);
$lafecha=$mifecha[3]."/".$mifecha[2]."/".$mifecha[1];
return $lafecha;
}
////////////////////////////////////////////////////
//Convierte fecha de normal a mysql
////////////////////////////////////////////////////
function cambiaf_ a_mysql($fecha){
ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fecha, $mifecha);
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
return $lafecha;
}
Las funciones utilizan expresiones regulares que no hemos visto todavÃa, asà que no vamos a tratar de explicar cómo funcionan, sino que explicaremos cómo utilizarlas.
Mostrar en la página una fecha en castellano
Si tenemos una fecha en formato MySQL y deseamos colocarla en una página haremos algo como sigue.
Suponemos que la fecha está extrayéndose a través de una consulta a la base de datos y la tenemos en una variable llamada $fila->fecha. Además, colocamos la fecha en un campo de formulario.
<input type="text" name="fecha" value="<?echo cambiaf_a_normal($fila->fecha);?>">
Colocar en la base de datos una fecha en formato MySQL
Cuando el usuario nos manda una fecha, por ejemplo, a través de un formulario con un campo como el que acabamos de ver, lógicamente, escribirá la fecha en castellano. Pero nosotros deseamos guardarla en una base de datos en un formato distinto, asà que habremos de convertirla.
Suponemos que tenemos la fecha en una variable llamada $fecha y que está en formato castellano. Además, queremos colocarla en una sentencia SQL que deseamos ejecutar en la base de datos para insertar un registro que contiene, entre otros datos, la fecha que el usuario ha escrito.
mysql_query ("insert into documento (titulo_documento, fecha_documento, cuerpo_documento) values ('$titulo_documento', '" . cambiaf_a_mysql($fecha) . "', '$cuerpo_documento')");
Este documento lo tome de: http://www.desarrolloweb.com/articulos/1280.php?manual=6
