Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Convertir Fecha

Estas en el tema de Convertir Fecha en el foro de PHP en Foros del Web. Señores quisiera ver si me pueden ayudar.. tengo una fecha de fomarto : 29/01/2016 en la bd se guarda como varchar. y necesito convertirlo a ...
  #1 (permalink)  
Antiguo 29/01/2016, 07:08
 
Fecha de Ingreso: abril-2015
Mensajes: 96
Antigüedad: 9 años
Puntos: 1
Convertir Fecha

Señores quisiera ver si me pueden ayudar..

tengo una fecha de fomarto : 29/01/2016 en la bd se guarda como varchar.
y necesito convertirlo a formato : 2016-01-29.


como podria hacer esto?, ya que he usado strtotime y me devuelve solo 01-01-1970.
  #2 (permalink)  
Antiguo 29/01/2016, 07:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Convertir Fecha

Bueno, en primer lugar, si la columna es un VARCHAR, ya hay un error de los graves. Las fechas deben guardarse en columnas DATE, DATETIME o TIMESTAMP, y NO en VARCHAR. HAY una enorme diferencia en ambas cosas.
AHora bien, para resolver el tema hay que ver si lo quieres hacer en PHP o en SQL. Son soluciones diferentes.
Y este foro es de PHP, no de BBDD. Si quieres la solución completa de la base, pregunta en el foro de BBDD.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 29/01/2016, 07:29
 
Fecha de Ingreso: abril-2015
Mensajes: 96
Antigüedad: 9 años
Puntos: 1
Respuesta: Convertir Fecha

Estimado.. esta claro lo de la fecha, asi como estoy claro que estoy en una seccion de php... no puedo modificar la bd, porque ya tiene 500 registros guardados y sube a diario, por lo tanto para lo que necesito quiero ver la manera de hacerlo en php. y si definitivamente no se puede recien vere la posibilidad de modificar la bd.
  #4 (permalink)  
Antiguo 29/01/2016, 07:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Convertir Fecha

OK.
Poderse, se puede, pero desde PHP sólo podrás modificar los datos usando SQL... Y si sigues almacenando mal formateada la fecha, seguirás teniendo el problema.

Como sea, en PHP formatear la fecha de una forma determinada es algo de manual de referencia.
Ver date_format()

Algo tan simple como:

Código PHP:
<?php
$date 
date_create('2000-01-01');
echo 
date_format($date'Y-m-d H:i:s');
?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 29/01/2016, 08:33
 
Fecha de Ingreso: abril-2015
Mensajes: 96
Antigüedad: 9 años
Puntos: 1
Respuesta: Convertir Fecha

eso lo hice, el problema es que me sale un mensaje de error..


Severity: Warning

Message: date_format() expects parameter 1 to be DateTime, boolean given
  #6 (permalink)  
Antiguo 29/01/2016, 08:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Convertir Fecha

Postea tu código. No somos adivinos y no podemos saber qué parte de tu script es la que está mal escrita si no lo meustras.
Que nos digas que "eso lo hice" no nos alcanza. Tenemos que VERLO.

Te sorprendería la cantidad de veces que nos dicen que hicieron algo, y en realidad no era exactamente así.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 29/01/2016, 10:29
 
Fecha de Ingreso: abril-2015
Mensajes: 96
Antigüedad: 9 años
Puntos: 1
Respuesta: Convertir Fecha

es asi como lo estoy realizando.

donde $row->CompromisoPago, es la variable php que contiene el valor (29/01/2016)
que por si sola si se muestra por pantalla.


Código PHP:
Ver original
  1. <?php
  2.             foreach($result->result() as $row){
  3.             ?>  
  4.  
  5.               <?php
  6.               $date = date_create($row->CompromisoPago);
  7.                echo date_format($date, 'Y-m-d H:i:s');
  8.               ?>
  9.  
  10.  
  11.             <?php } ?>
  #8 (permalink)  
Antiguo 29/01/2016, 10:49
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Convertir Fecha

Y si lo haces así:

Código PHP:
Ver original
  1. $fechastr = strtotime($row->CompromisoPago);
  2. $fechadt = date("Y-m-d",$fechastr);
  3. echo $fechadt;
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #9 (permalink)  
Antiguo 29/01/2016, 12:25
 
Fecha de Ingreso: abril-2015
Mensajes: 96
Antigüedad: 9 años
Puntos: 1
Respuesta: Convertir Fecha

no me funciono...

me entrego este resultado de respuesta:

1970-01-01
  #10 (permalink)  
Antiguo 29/01/2016, 12:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Convertir Fecha

Cita:
Iniciado por esoto Ver Mensaje
es asi como lo estoy realizando.

donde $row->CompromisoPago, es la variable php que contiene el valor (29/01/2016)
que por si sola si se muestra por pantalla.


Código PHP:
Ver original
  1. <?php
  2.             foreach($result->result() as $row){
  3.             ?>  
  4.  
  5.               <?php
  6.               $date = date_create($row->CompromisoPago);
  7.                echo date_format($date, 'Y-m-d H:i:s');
  8.               ?>
  9.  
  10.  
  11.             <?php } ?>
Lo estás realizando, pero no estás .tomando en consideración que el formato que tienes almacenado en ese campo NO ES un formato de tipo US, es decir, depende de la región.
Prueba esto:
Código PHP:
  $date date_create_from_format('d/m/Y',$row->CompromisoPago);
  echo 
date_format($date'Y-m-d H:i:s'); 
Ver Manual de Referencia: date_create_from_format()
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 29/01/2016, 12:48
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: Convertir Fecha

Otra solución es convertir los slashes por guiones medios.
Código PHP:
Ver original
  1. echo date("Y-m-d H:i:s, strtotime(str_replace('/', '-', $row->CompromisoPago) ) ) ;
.

Aquí hay un post que me ayudó en mis inicios cuando cometí el mismo error. http://www.forosdelweb.com/f86/conve...-date-1040895/ gracias al propio gnzsoloyo.

Te aconsejo cambies las fechas a DATETIME, ya que en los filtros de mysql no funciona bien si tienes varchar, al comparar fechas tampoco puedes, al filtrar en DataTables Jquery tampoco, etc. etc.
  #12 (permalink)  
Antiguo 29/01/2016, 12:49
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: Convertir Fecha

Edito. Se me duplicó el mensaje, una disculpa.
  #13 (permalink)  
Antiguo 29/01/2016, 13:51
 
Fecha de Ingreso: abril-2015
Mensajes: 96
Antigüedad: 9 años
Puntos: 1
Respuesta: Convertir Fecha

al aplicar esto ->

Código PHP:
Ver original
  1. $date = date_create_from_format('d/m/Y',$row->CompromisoPago);
  2.   echo date_format($date, 'Y-m-d H:i:s');

me sigue generando el mismo error : Severity: Warning

Message: date_format() expects parameter 1 to be DateTime, boolean given


y al aplicar esto :
Código PHP:
Ver original
  1. echo date("Y-m-d H:i:s, strtotime(str_replace('/', '-', $row->CompromisoPago) ) ) ;

me entrega el siguiente resultado :

2016-01-29, 0731Fri, 29 Jan 2016 20:43:07 +0100312016314301Europe/Berlin(0731Fri, 29 Jan 2016 20:43:07
  #14 (permalink)  
Antiguo 29/01/2016, 15:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Convertir Fecha

Pinta que ese miembro no tiene el valor que tu dices que tiene...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 29/01/2016, 17:16
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Convertir Fecha

Yo opino lo mismo, deberías poner el var_dump de ese miembro para ver qué valor realmente tiene.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #16 (permalink)  
Antiguo 29/01/2016, 17:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Convertir Fecha

Hagamos algo: Postea el resultado de esto, y veamos realmente qué contiene eso:

Código PHP:
Ver original
  1. echo $row->CompromisoPago;
  2. echo "\n";
  3. echo str_replace('/', '-', $row->CompromisoPago);

Por otro lado, sólo nos has puesto una parte del código de ese script.
Postea el código COMPLETO, por favor. Lo que hayas omitido puede ser fundamental para entender donde se origina el problema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 29/01/2016, 19:56
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: Convertir Fecha

Cita:
Iniciado por esoto Ver Mensaje

y al aplicar esto :
Código PHP:
Ver original
  1. echo date("Y-m-d H:i:s, strtotime(str_replace('/', '-', $row->CompromisoPago) ) ) ;

me entrega el siguiente resultado :

2016-01-29, 0731Fri, 29 Jan 2016 20:43:07 +0100312016314301Europe/Berlin(0731Fri, 29 Jan 2016 20:43:07
Prueba así
Código PHP:
    echo date("Y-m-d H:i:s"strtotime(str_replace('/''-'$row->CompromisoPago) ) ) ; 
. Me faltaba una comilla en el primer parametro del date.
  #18 (permalink)  
Antiguo 01/02/2016, 08:36
 
Fecha de Ingreso: abril-2015
Mensajes: 96
Antigüedad: 9 años
Puntos: 1
Respuesta: Convertir Fecha

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Hagamos algo: Postea el resultado de esto, y veamos realmente qué contiene eso:

Código PHP:
Ver original
  1. echo $row->CompromisoPago;
  2. echo "\n";
  3. echo str_replace('/', '-', $row->CompromisoPago);

Por otro lado, sólo nos has puesto una parte del código de ese script.
Postea el código COMPLETO, por favor. Lo que hayas omitido puede ser fundamental para entender donde se origina el problema.
estimado.. hice lo que me dijiste y este fue el resultado:

15/01/2016 15-01-2016

por lo tanto si esta mostrando los datos correctamente.
  #19 (permalink)  
Antiguo 01/02/2016, 08:49
 
Fecha de Ingreso: abril-2015
Mensajes: 96
Antigüedad: 9 años
Puntos: 1
Respuesta: Convertir Fecha

Estimados.. ya solucione el problema.. gracias a la ultima solucion de gnzsoloyo, me dio la pista por donde iba el camino a seguir..

gracias :D
  #20 (permalink)  
Antiguo 01/02/2016, 12:16
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Convertir Fecha

Hola esoto,

Si lo has resuelto y posteas el resultado, le puede ayudar a alguien que tenga el mismo problema y venga por aquí buscando una solución como te ha ocurrido a ti.

Solo es una sugerencia, pero es la base de estos foros...
  #21 (permalink)  
Antiguo 01/02/2016, 12:51
 
Fecha de Ingreso: abril-2015
Mensajes: 96
Antigüedad: 9 años
Puntos: 1
Respuesta: Convertir Fecha

Estimado.. tiene toda la razón,

y bueno la solución fue como la planteo el usuario mas arriba.

Código PHP:
Ver original
  1. $row->CompromisoPago;          
  2.             $Pago = str_replace('/', '-', $row->CompromisoPago);

Etiquetas: fecha
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:19.