Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Error al convertir fechas

Estas en el tema de Error al convertir fechas en el foro de PHP en Foros del Web. Estoy con un problema al convertir fechas del formato americano al europeo. Yo recibo una fecha en formato europeo (Ej: 05/12/2012) y necesito convertirla a ...
  #1 (permalink)  
Antiguo 04/04/2013, 12:40
sjj
 
Fecha de Ingreso: octubre-2008
Mensajes: 213
Antigüedad: 15 años, 5 meses
Puntos: 12
Error al convertir fechas

Estoy con un problema al convertir fechas del formato americano al europeo. Yo recibo una fecha en formato europeo (Ej: 05/12/2012) y necesito convertirla a formato americano para guardarla en la base de datos. Esto es lo que tengo (el campo del formulario por el que envío la fecha que deseo convertir se llama fechanac):

Código PHP:
<?php
$conexion
  
or die("Problemas en la conexion");
mysql_select_db("ici_bleza",$conexion) or
  die(
"Problemas en la seleccion de la base de datos");
$fec1="$_REQUEST[fechanac]";
$fec2=date("Y-m-d",strtotime($fec1));
mysql_query("insert into saldos(fecha) values('$fec2')" 
   
$conexion) or die("<img src='error.png'/>");
   echo 
$fec1;
   echo 
$fec2;
mysql_close($conexion);
?>
El problema es que al convertir la fecha, convierte cualquier cosa. Por ejemplo le envío 2012/12/05 y graba 2014/06/06. ¿Alguien ve el error?

Muchas gracias.
  #2 (permalink)  
Antiguo 04/04/2013, 12:56
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Error al convertir fechas

no use $_REQUEST, además las comillas son innecesarias:

Código PHP:
Ver original
  1. $fec1=$_POST['fechanac']; // o $_GET según el caso

¿por que no usar las funciones de MySQL para convertir fechas, como STR_TO_DATE?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 04/04/2013, 13:40
sjj
 
Fecha de Ingreso: octubre-2008
Mensajes: 213
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Error al convertir fechas

Porque no domino el uso de esa función, y de este modo me venía funcionando. Hice el cambio que me sugeriste pero sigue tirando mal. Le envío 1-12-2012 y graba 2007-06-04.
  #4 (permalink)  
Antiguo 04/04/2013, 13:44
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Error al convertir fechas

puedes consultar la documentación de MySQL en la web, y las correcciones que te indique son motivadas a estándar, no sobre tu problema, obviamente no solucionará el problema de fechas .

https://dev.mysql.com/doc/refman/5.5...functions.html
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 05/04/2013, 10:09
sjj
 
Fecha de Ingreso: octubre-2008
Mensajes: 213
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Error al convertir fechas

Lo estoy intentando con esa función pero algo estoy haciendo mal porque no llega a grabar. Si me puedes ayudar, agradecido:

Código PHP:
$conexion or die("Problemas en la conexion");
mysql_select_db("ici_bleza",$conexion) or 
  die(
"Problemas en la seleccion de la base de datos"); 
$fec1=$_POST['fechanac'];
$sql="SELECT STR_TO_DATE('$fec1','%d,%m,%Y');";
$res=mysql_query($sql,$conexion);
$row mysql_fetch_array($res);
mysql_query("insert into saldos(fecha) values('$res')" 
   
$conexion) or die("<img src='error.png'/>");   
   echo 
$fec1;
   echo 
$res;
mysql_close($conexion); 
  #6 (permalink)  
Antiguo 05/04/2013, 10:15
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Error al convertir fechas

no hace falta que hagas otra consulta SQL para obtener la conversión, aplicalo directo en el insert, elimina el otro select y mysql_query

Código PHP:
Ver original
  1. mysql_query("insert into saldos(fecha) values(STR_TO_DATE('$fec1','%d,%m,%Y'))" ,
  2.    $conexion) or die("<img src='error.png'/>");  
  3.    echo $fec1;
  4.    echo $res;

además: ¿tu separador en la fecha es la coma?, porque veo esto: %d,%m,%Y
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 05/04/2013, 10:37
sjj
 
Fecha de Ingreso: octubre-2008
Mensajes: 213
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Error al convertir fechas

Gracias, ahí capturé el error y el problema es que no me está tomando la variable que contiene la fecha. Si le paso como parámetro una fecha en formato europeo, convierte y graba correctamente. Si le paso la variable devuelve el error "Column 'fecha' cannot be null".

Código PHP:
$fec1=$_POST['fechanac'];
mysql_query("insert into saldos(fecha) values(STR_TO_DATE('$fec1','%d,%m,%Y'))" ,
$conexion) or die(mysql_error()); 
  #8 (permalink)  
Antiguo 05/04/2013, 11:45
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Error al convertir fechas

es que según tú, la fecha es 05/12/2012, pero aplicas el patrón %d,%m,%Y, cuando debería ser %d/%m/%Y

el separador de fechas también cuenta
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #9 (permalink)  
Antiguo 05/04/2013, 12:30
sjj
 
Fecha de Ingreso: octubre-2008
Mensajes: 213
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Error al convertir fechas

Creo que el problema que debo tener es este porque sigue devolviendo el mismo error:

Cita:
If the date, time, or datetime value extracted from str is illegal, STR_TO_DATE() returns NULL and produces a warning.
Ahora le estoy enviando la fecha con formato de guiones que es como se graba en la base de datos con formato date (2-4-2013) y la convierto así:

Código PHP:
$fec1=$_POST['fechanac'];
mysql_query("insert into saldos(fecha) values(STR_TO_DATE($fec1,'%Y-%m-%e'))" 
/*Le envié la e, en lugar de la d porque el número viene con un sólo digito sin el cero delante.*/
   
$conexion) or die(mysql_error()); 
Disculpá tantas molestias y muchas gracias. Te mando puntitos.
  #10 (permalink)  
Antiguo 05/04/2013, 12:34
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Error al convertir fechas

no es molestia, para eso estamos en el foro, para ayudar y enseñar, saludos
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #11 (permalink)  
Antiguo 05/04/2013, 12:41
sjj
 
Fecha de Ingreso: octubre-2008
Mensajes: 213
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Error al convertir fechas

No fui claro, disculpame. Ahora le estoy enviando la fecha en ese formato y sigue sin funcionar...jeje. Por eso mis disculpas anticipadas, porque sigo sin poder resolver el problema... Si alguien ve un error le agradecería, ya que no me parece estar enviando la fecha en un formato incorrecto.
  #12 (permalink)  
Antiguo 05/04/2013, 14:41
Avatar de jariza  
Fecha de Ingreso: agosto-2003
Ubicación: Málaga
Mensajes: 1.449
Antigüedad: 20 años, 8 meses
Puntos: 10
Respuesta: Error al convertir fechas

En el último código que has puesto creo que se te han olvidado las comillas que rodean a $fec1.

Un saludo :)
  #13 (permalink)  
Antiguo 05/04/2013, 14:44
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Error al convertir fechas

en efecto, @jariza dio en el clavo, intenta con:
Código PHP:
Ver original
  1. $fec1=$_POST['fechanac'];
  2. mysql_query("insert into saldos(fecha) values(STR_TO_DATE('$fec1','%Y-%m-%e'))" ,
  3. /*Le envié la e, en lugar de la d porque el número viene con un sólo digito sin el cero delante.*/
  4.    $conexion) or die(mysql_error());
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #14 (permalink)  
Antiguo 05/04/2013, 14:52
sjj
 
Fecha de Ingreso: octubre-2008
Mensajes: 213
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Error al convertir fechas

Tenés razón, che. Era eso. Te agradezco la atención.

Además estaban dados vuelta el día y el año y por eso grababa cualquier cosa. Este es el código final que me quedó y funciona perfecto, por si a alguien le sirve:

Código PHP:
$fec1=$_POST['fechanac'];
mysql_query("insert into saldos(fecha) values(STR_TO_DATE('$fec1','%e-%m-%Y'))" 
   
$conexion) or die(mysql_error()); 
Muchas gracias Mayco y Jariza.

Etiquetas: formulario, mysql, select
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 12:12.