PHP - Formato Fecha CSV Mysql

 
Vista:

Formato Fecha CSV Mysql

Publicado por Roberto robherblanc@outlook.com (42 intervenciones) el 12/05/2019 00:32:24
Hola. Estoy intentando insertar registros en mysql a partir de un csv donde uno de los campos es de tipo fecha y formato "d/m/Y" ej. "01/10/2014".
En mi bd mysql el campo FECHA_BAJA donde quiero hacer el insert es de tipo Date y como valor predeterminado nulo.
El problema es que siempre me aparece un error en mysql en el campo FECHA_BAJA.
Formateo la fecha pero da igual. Estoy utilizando por ejemplo $fecha_formateada = date("Y-m-d",strtotime($baja));
Tambien he probado a cambiar en mi mysql el campo FECHA_BAJAa tipo varchar a ver que me guardaba y me guardaba solo años y no tenia nada que ver con los años de la fecha ademas. No lo entiendo muy bien. No sé igual el problema esta en la exportacion de ese campo a csv. Igual tiene que venir ya formateado de alguna manera pq la verdad es que parece una cosa sencilla pero veo que me está dando muchos problemas.
El último error era algo así.
Codigo .:3database error: Incorrect date value:'2003' for column 'FECHA_BAJA' at row 1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formato Fecha CSV Mysql

Publicado por Mauro (453 intervenciones) el 13/05/2019 04:05:39
El problema parece estar en el dato que levantas del CSV... ¿podrías pegar un par de líneas del archivo para verlas?

También ayudará ver cómo lees el archivo y accedes al campo fecha
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Formato Fecha CSV Mysql

Publicado por ROBERTO (42 intervenciones) el 15/05/2019 10:40:58
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$archivo = fopen("socios.csv","r");
While (($datos = fgetcsv($archivo, 1000, ";")) = true) {
 
   $codigo = $datos[0];
   .
   .
   .
   .
   $fecha = $datos[9];
 
   $caracteres = strlen($baja);
 
   if ($caracteres == 10){
 
       $strFecha = date_format($fecha,"Y-m-d");
 
  }else{
        $strFecha = "Null";
  }
 
 
    $sql  =  "INSERT INTO SOCIOS (CODIGO .......... FECHA) VALUES('$codigo',.............$strFecha)";
    $result = mysqli_query($conectando,$sql) or die ("database error: ".mysqli_error($conectando);
}
fclose($archivo);




***** El campo FECHA EN la base de datos es de tipo date ********************
***** La columna de fecha en el csv está formateada como fecha ej. 01/01/2019.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo_pm
Val: 997
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formato Fecha CSV Mysql

Publicado por italo_pm (144 intervenciones) el 15/05/2019 16:17:02
hola, para formatear las fechas a mysql podrias utilizar esto como ejemplo:

1
2
3
4
5
6
7
8
9
<?php
 
$fecha = '09/04/2019'; //nueve de abril del 2019
$fecha = str_replace('/', '-', $fecha);
$fecha_mysql = date('Y-m-d', strtotime($fecha));
 
echo "La fecha formato mysql es: ".$fecha_mysql;
 
?>

salud2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formato Fecha CSV Mysql

Publicado por Mauro (453 intervenciones) el 15/05/2019 16:45:53
Ok, el tema debe estar en la línea:

1
date_format($fecha,"Y-m-d");

Fíjate que la función date_format es en realidad un alias a DateTime::format.

Lo que tienes que pasarle como parámetro es un objeto de tipo DateTime, lo que le estás pasando es un string.

Prueba creando un objeto a partir de tu string:

1
$fecha = DateTime::createFromFormat('d/m/Y', $datos[9] );
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Formato Fecha CSV Mysql

Publicado por ROBERTO (42 intervenciones) el 16/05/2019 01:34:36
Con esta funcion me da este error.
database error: you have an error in your sql syntax; check the manual that corresponds to yout mysql server version for de right syntax to use near "1" at line 1.

y con la primera opcion que me plantea italo_pm
1
2
$fecha = str_replace('/','-',$fecha);
$fecha_mysql = date('Y-m-d',strtotime($fecha));

arroja este error.
dateabase error: incorrect date value '2009' for column 'FECHA' at row 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formato Fecha CSV Mysql

Publicado por Mauro (453 intervenciones) el 16/05/2019 14:59:58
Con esta funcion me da este error.
database error: you have an error in your sql syntax; check the manual that corresponds to yout mysql server version for de right syntax to use near "1" at line 1.


¿Podrías hacer que antes de ejecutar el SQL lo imprima por pantalla? De esa forma sabrás exactamente qué le estás enviando al MySQL y podremos entender mejor el error... A simple vista, lo que veo que puede fallar es que el $strFecha no está encomillado, deberías escribirlo así:

1
$sql  =  "INSERT INTO SOCIOS (CODIGO .......... FECHA) VALUES('$codigo',.............'$strFecha')";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo_pm
Val: 997
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formato Fecha CSV Mysql

Publicado por italo_pm (144 intervenciones) el 16/05/2019 17:22:40
Hola

el campo date en mysql es YYYY-MM-DD

al parecer el dato que tratas de insertar es distinto.

Realiza como te sugieren el echo o print de $datos[9]; para saber que contiene como fecha.

salud2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Formato Fecha CSV Mysql

Publicado por ROBERTO (42 intervenciones) el 17/05/2019 00:49:19
Al mostrarlo por pantalla me aparece :

2012-01-02

Curiosamente la primera fecha que aparece en mi csv es 01/02/2012 asi que el mes tampoco me lo formatea bien.

y al guardar en la bd me aparece el error

database error: incorrect date value : '2009' for column 'FECHA' at row 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formato Fecha CSV Mysql

Publicado por Mauro (453 intervenciones) el 17/05/2019 17:12:40
Probá lo que te decía en mis respuestas anteriores:

1 - Fijate cómo se está construyendo la fecha a partir del CSV
2 - Imprimí por pantalla el SQL antes de ejecutarlo y probalo directo en la bd
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Formato Fecha CSV Mysql

Publicado por ROBERTO (42 intervenciones) el 17/05/2019 00:48:59
Al mostrarlo por pantalla me aparece :

2012-01-02

Curiosamente la primera fecha que aparece en mi csv es 01/02/2012 asi que el mes tampoco me lo formatea bien.

y al guardar en la bd me aparece el error

database error: incorrect date value : '2009' for column 'FECHA' at row 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Formato Fecha CSV Mysql

Publicado por Alpha (2 intervenciones) el 12/11/2019 20:22:52
que tal, estoy viendo como cambiar el formato de la fecha en un archivo csv, lo abre lo lee y me lo acomoda por en una tabla
la cuestion es que el archivo puede variar la posision de la fecha, me refiero a que puede estar en la primera columna o la ultima,
eh intentado con date_format($fecha,"Y-m-d");
yo quiero el formato D-M-Y
ya que en el archivo esta como M-D-Y
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Formato Fecha CSV Mysql

Publicado por ROBERTO (42 intervenciones) el 12/11/2019 23:22:10
Hola.

Puedes extraer el dia, mes y año de tu fecha sin formatear con esta función.

1
$f = explode("/",$fecha);

Despues formas la fecha como te interese.

1
$f2 = $f[0]."-".$f[1]."-".$f[2];


0 = dia
1 = mes
2 = año
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formato Fecha CSV Mysql

Publicado por Mauro (453 intervenciones) el 13/11/2019 15:06:46
Si la posición del dato cambia puede no ser un problema, basta con que incluyas en el archivo una fila con los nombres de los campos o que intentes transformar cada campo en fecha y quedarte sólo con el que te da un resultado correcto (es decir adivinar cuál es el campo fecha).

Si la fecha no siempre viene ordenada del mismo modo (Siempre MM-DD-YY, YYYY-MM-DD o lo que fuera) vas a estar en un problema.

De algún modo vas a necesitar que cada línea del archivo indique el formato de fecha que usa, de otra forma cómo podrías saber si '2019-04-05' es el 5 de Abril de 2019 o el 4 de Mayo de 2019?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Formato Fecha CSV Mysql

Publicado por Alpha (2 intervenciones) el 13/11/2019 18:48:38
hola te muestro mi codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
echo "<html><body><table>\n\n";
if (($f = fopen($_FILES['archivo']['tmp_name'], "r+")) !== FALSE) {
   while (($line = fgetcsv($f)) !== false) {
 
 
       echo "<tr>";
       foreach ($line as $col) {
 
           echo "<td>" . htmlspecialchars($col) . "</td>";
       }
       echo "</tr>\n";
 
   }
 
   fclose($f);
   echo "\n</table></body></html>";
 
}

lo tengo asi ya de forma oredenada en una tabla
tengo que encotrar la fecha cuyo formato es MM/DD/YY y lo quiero convertir a DD/MM/YY
como lo estaria realizando ?
Gracias por la info
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar