Foros del Web » Programando para Internet » PHP »

trabajar con fechas desde BD

Estas en el tema de trabajar con fechas desde BD en el foro de PHP en Foros del Web. Hola foro, he hecoh un sistema de noticias en el cual hay que introducir la fecha con el formato AAAA-MM-DD por lo visto es que ...
  #1 (permalink)  
Antiguo 07/11/2003, 07:38
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 20 años, 6 meses
Puntos: 2
trabajar con fechas desde BD

Hola foro,

he hecoh un sistema de noticias en el cual hay que introducir la fecha con el formato AAAA-MM-DD por lo visto es que que hay que usar con PHPAdmin... y según me ha parecido ver en el manual con la función date(d/m/Y,$fecha) te convierte la fecha dada en $fecha con el formato que tú le has indicado...

Después de coger los datos de la base de datos... pongo lo siguiente en el código...

$fecha = date("d/m/Y",$datos[1]);
echo $fecha;

pero me muestra la fecha inicial del 01/01/70... cómo hago para quela fecha salga como Dios manda??

gracias de antemano!!!!
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #2 (permalink)  
Antiguo 07/11/2003, 08:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Tus fechas en tu BD .. que tipo de campo usas. Un DATE? DATETIME? .. un VARCHAR .. un INT? .. otro?

Supongo que usas un campo DATE (por lo que comentas de "phpMyadmin" .. que NO es que lo fuerce phpMyadmin .. sino que ASI es la estructura de fechas para ese tipo de campo DATE y que es standard "ODBC" ..)

Si trabajas con campos DATE en tu BD .. Mysql ya tiene su función DATE_FORMAT() (casi equivalente a date() de PHP) para formatear su salida al formato que gustes.

Así, al hacer tu "SELECT" para mostar esa fecha .. haces algo tipo:

SELECT DATE_FORMAT("formato",fecha) as mi_fecha,otroscampos FROM tabla ....

En tu $row['mi_fecha'] (si haces un tipico $row=mysql_fetch_array(...)) tendrás la fecha formateada a tu gusto. El "as" es un "alias" de esa función .. (así que tendras tu fecha y mi_fecha para que uses el que gustes)

mas info:
www.mysql.com/date_format

Lo mismo puedes hacer para ingresar fechas en ese campo DATE .. NO es necesario que siguas ese formato a la hora de introducirlos por tus formularios .. Pero, si que debes "entregarselos" en ese formato a Mysql en tu mysql_query() cuando lances tu INSERT .. o UPDATE (SQL).

Eso lo puedes solventar .. concatenando y/o aplicando explode() a tu $fecha "31/12/2003" para reordenar y dejar esa variable como: "12-31-2003" que es lo que necesita los campos DATE. (de esto creo que hay una FAQ que habla de ello).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 07/11/2003, 08:25
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
asi es, pues date recibe como parametro (el segundo) un timestamp unix, y como tu le pasas una fecha en otro formato te arroja el valor de 1970, que es la fecha unix inicial o algo asi, y que la pone por defecto o en caso de error.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #4 (permalink)  
Antiguo 07/11/2003, 08:32
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 20 años, 6 meses
Puntos: 2
entonces?? cual es la solución más sencilla?? usando el valor que me devuelve el SELECT * FROM $seccion ORDER BY `Fecha` DESC, `id` DESC LIMIT $inicio, $mostrar??

la cuestion es que los datos se pueden meter por web... y si al insertar una tabla tengo que detectar si es un campo fecha es más complicado, no??

Cluster la verdad es que no me he enterado muy bien

Gracias y buen fin de semana!!!!!!!
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #5 (permalink)  
Antiguo 07/11/2003, 08:43
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
Pero ahi el problema estaria en la interfaz que provees para tomar la fecha, por ejemplo si pones un input para el dia, otro para el año, y un select para el mes, puedes comprobar facilmente si es una fecha valida (con checkdate(mes,dia,año)) luego reubicar el mes,dia y año segun el formato aceptado por mysql y grabar. Los campos date de mysql estan formateados asi: año/mes/dia y puedes proporcionarselos (en un insert) como una cadena, asi: 'año/mes/dia'. Para leer las fechas desde la bd usas lo que indico cluster.
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #6 (permalink)  
Antiguo 17/11/2003, 05:08
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 20 años, 6 meses
Puntos: 2
lo siento, por no contestar antes... pero no he podido...

he puesto este "SELECT" para hacer el alias de la fecha con su formato,

SELECT *,DATE_FORMAT( `Fecha` , 'd/m/Y' ) AS mi_fecha FROM $seccion ORDER BY `Fecha` DESC, `id` DESC

y luego he usado este para mostrala... pero no sale

echo $mi_fecha; al ser un alias hay que llamarlo de otra forma que con "$"??

Gracias!!
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #7 (permalink)  
Antiguo 17/11/2003, 11:36
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 20 años, 6 meses
Puntos: 2
bueno, al final he usado el explode y me he dejado de tonterías :D

Muchas gracias!!!! ya está solucionado ;)
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #8 (permalink)  
Antiguo 17/11/2003, 12:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
X3mdesign

DATE_FORMAT() y SQL en general no son "tonterias" .. otra cosa es que veas más fácil solventar un problema con otros métodos.


No sé que usas para recorrer una consulta .. pero supongamos que haces algún:

Código PHP:
$result=mysql_query($sql);
while (
$row=mysql_fetch_array($result)){
echo 
$row['campos'];

en:

Código PHP:
$row['mi_fecha'
que es tu alias que has creado para la función DATE_FORMAT() tienes esa fecha formateada ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 18/11/2003, 03:03
Avatar de X3mdesign  
Fecha de Ingreso: octubre-2003
Ubicación: Madrid
Mensajes: 649
Antigüedad: 20 años, 6 meses
Puntos: 2
No me mal interpretes Cluster la cuestión es que al no resolver el tema tenía puesto en la web la fecha "mal" y me ha resultado muy sencillo hacerlo cn explode que si lo hubiese hecho desde el principio... pues mucho mejor

Lo intentaba dse la siguiente manera:

Código PHP:
$contenido mysql_query ("SELECT *,DATE_FORMAT( `Fecha` , 'd/m/Y' ) AS mi_fecha FROM $seccion ORDER BY `Fecha` DESC, `id` DESC LIMIT $inicio, $mostrar");

while (
$datos mysql_fetch_row ($contenido)){
  echo 
$datos['mi_fecha'];

Gracias por todo!!!
__________________
Nippon-Tour, tu portal sobre Japón
¿Te gusta el manga, haces tus propios dibujos? Visita FanArt de Nippon-Tour
  #10 (permalink)  
Antiguo 20/11/2003, 10:39
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
X3m:

Hola, tu query está bien, pero le sobran un par de comillas y la sintaxis de d/m/y es incorrecta, por eso cuando haces echo $datos["mi_fecha"]; no funciona...

Cambia en tu query la parte:
DATE_FORMAT( `Fecha` , 'd/m/Y' ) AS mi_fecha

...por:
DATE_FORMAT( Fecha , '%d/%m/%Y' ) AS mi_fecha

Lo que pasa es que el primera argumento de DATE_FORMAT lo estabas pasando como un string, es decir, no como lo que contiene la fila Fecha, sino como la palabra Fecha, y el segundo argumento, funciona como el DATE de PHP, pero la sintaxis es un poco distinta, por eso de ,los % como separadores (los / que puse es para que salga dd/mm/yyyy, si lo quieres de otro modo, usa - para dd-mm-yyyy o el caracter que quieras como separador)

Saludos!!!
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 23:25.