Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con fechas

Estas en el tema de Problema con fechas en el foro de Mysql en Foros del Web. Eh visto en algunos sistemas que cuando posteas dice: Posteado hace 1 hora, 1 semana, 1 mes, 1 año, segun el tiempo que lleve posteado ...
  #1 (permalink)  
Antiguo 15/08/2008, 14:18
Avatar de arsenal  
Fecha de Ingreso: agosto-2008
Mensajes: 65
Antigüedad: 15 años, 8 meses
Puntos: 2
Problema con fechas

Eh visto en algunos sistemas que cuando posteas dice:
Posteado hace 1 hora, 1 semana, 1 mes, 1 año, segun el tiempo que lleve posteado el aporte verdad..

Yo quiero hacer algo asi a mi sistema...
Ya he creado la tabla con un campo timestamp y todo bien pero ahora como hacerle para mostrar el tiempo que a pasado desde que se posteo con la fecha actual..

pero de esta forma:
Posteado hace 1 hora ó 1 semana ó 1 mes ó 1 año...

Y asi..

Tiene idea , es dificil? o eso se hace con php?
  #2 (permalink)  
Antiguo 17/08/2008, 17:17
Avatar de arsenal  
Fecha de Ingreso: agosto-2008
Mensajes: 65
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Problema con fechas

Alguien tiene alguna idea?
Necesito, un poco de logica..

Como podria hacer eso?

Saludos!!
  #3 (permalink)  
Antiguo 20/08/2008, 03:13
 
Fecha de Ingreso: mayo-2005
Mensajes: 43
Antigüedad: 19 años
Puntos: 0
Respuesta: Problema con fechas

mmmmmmm si lo quieres hacer en mysql pues creando 2 campos con fecha1 y fecha2 (actual) y usando el DATEDIFF(fecha1, fecha2) as fecha_diferente ...

Pero lo más elegante es con una funcion en php restar fecha... :D

Saludos

Última edición por thefantas; 03/10/2008 a las 15:30
  #4 (permalink)  
Antiguo 20/08/2008, 08:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con fechas

En MySQL, podrías hacer esto o algo parecido. Te he puesto una resta entre dos fechas traídas de la base. Si se tratase de una resta con la fecha actual, tendrías que utilizar como fecha2 el NOW(). Observa que lo primero que hago sacar la diferencia en segundos entre las fechas, para lo que utilizo TIMESTAMPDIFF(), una función que tiene MySQL desde la versión 5. Si no usas dicha versión, sino otras anteriores, puedes utilizar en su lugar una simple resta como UNIX_TIMESTAMP(fecha2) - UNIX_TIMESTAMP(fecha1), que te ofrece lo que buscamos, la diferencia en segundos entre ambas fechas. El método es el de división exacta y resto de división exacta, siempre a partir de segundos.

Cita:
SELECT fecha1, fecha2, FLOOR( TIMESTAMPDIFF(
SECOND , fecha1, fecha2 ) /604800 ) AS semanas, FLOOR( (
TIMESTAMPDIFF(
SECOND , fecha1, fecha2 ) %604800 ) /86400
) AS dias, FLOOR( (
TIMESTAMPDIFF(
SECOND , fecha1, fecha2 ) %86400 ) /3600
) AS horas, FLOOR( (
TIMESTAMPDIFF(
SECOND , fecha1, fecha2 ) %3600 ) /60
) AS minutos, FLOOR( TIMESTAMPDIFF(
SECOND , fecha1, fecha2 ) %60 ) AS segundos
FROM `diffecha`
Por supuesto, puedes utilizar una de las muchas funciones creadas para PHP, ASP, etc. que podrás encontrar en la red y que hacen lo mismo. Es más, en PHP hay alguna hecha en el foro. La función se llama seg2tiempo, que aunque es antigua, hace lo que quieres y puedes adaptarla. Echa un vistazo con el buscador.
Observarás que no pongo meses, ni años. La razón es que eso ya no sería exacto. Me explico. Los meses tendríamos que hacerlos de 30 días todos, y los años de 365 días, y no siempre es así. Si quieres puede hacerse, aunque el dato ya no sería exacto. Sólo tendrías que aplicar a meses y años la misma lógica seguida para semanas, días, horas, etc., pero haciendo las operaciones con meses de 30 días, y años de 365 días.
  #5 (permalink)  
Antiguo 23/08/2008, 14:28
Avatar de arsenal  
Fecha de Ingreso: agosto-2008
Mensajes: 65
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Problema con fechas

Primero que nada jurena y thefantas, muchas gracias chicos..
Pues si mas o menos seria asi, pero la idea seria quew me devuelva en una sola variable o en un solo alias, el tiempo que lleva posteado esa noticia... que me diga si fue hace segundos o hace minutos o hace dias..

Para yopoder imprimir algo asi "posteado hace 3 hrs" si lleva un dia ya posteado "posteado hace 1 dia".. algo asi... como en algunos blogs..

Si se puede hacer eso directo en mysql o ya tiene que ser en php..
  #6 (permalink)  
Antiguo 23/08/2008, 15:43
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: Problema con fechas

Es una combinación.
Piensa que la única forma de recuperar la fecha del post es consultarla a la base de datos. Si lo que quieres que te devuelva es un DateTime, un string o un valor numérico, eso dependerá de cómo implementes la respuesta en la web.
Mi sugerencia es que los cálculos los hagas en la capa de negocios (funciones de PHP), de modo de no cargarle tareas inútilmente a la base de datos (es más ortodoxo), pero si quieres que te devuelva un conjunto de posts y colocar el tiempo desde su posteo en forma rápida, si es mejor que el dato ya te lo devuelva en la tabla.
Una simple función TIMESTAMPDIFF() sobre un DateTime sería la mejor opción, e incluirla dentro de un CASE de la consulta sería bastante mejor...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 22:24.