Foros del Web » Programando para Internet » PHP »

Comparar fecha almacenada en BBDD con fecha NOW y obtener x resultado

Estas en el tema de Comparar fecha almacenada en BBDD con fecha NOW y obtener x resultado en el foro de PHP en Foros del Web. Hola, Tengo un query sencillo a una BBDD donde hay un campo que es fecha. Este es el query: Código PHP: <?php  $conexion  =  mysql_connect ...
  #1 (permalink)  
Antiguo 07/06/2006, 22:52
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Comparar fecha almacenada en BBDD con fecha actual y obtener "x" resultado

Hola,

Tengo un query sencillo a una BBDD donde hay un campo que es fecha.

Este es el query:

Código PHP:
<?php 
$conexion 
mysql_connect("localhost","XXXXXXXX","XXXXXX");
mysql_select_db("mindpani_foros"$conexion) OR die("No se puede establecer la conexión a MySQL");
$sql mysql_query("SELECT * FROM sets ORDER BY fecha DESC") or die (mysql_error()); 
while (
$row mysql_fetch_array($sql)) { 
$id "$row[setid]"
$titulo "$row[setname]";
$link "$row[seturl]";
$autor "$row[setautor]";
$estilo "$row[estiloid]";
$duracion "$row[setduracion]";
$tamano "$row[setsize]";
$clics "$row[setclics]"
$criticas "$row[urlcriticas]";
$fecha "$row[fecha]"

    echo
"
    <tr>
        <td width='44%' class='texto3'><a href='descargar.php?id=$id&link="
.urlencode($link)."' class='ultimos'>$titulo</a><br />By $autor</td>
        <td width='20%' class='texto3' style='border-left:0px;' align='center' valign='middle'>$estilo</td>
        <td width='15%' class='texto3' style='border-left:0px;' align='center' valign='middle'>$tamano Mb.</td>
        <td width='5%' class='texto3' style='border-left:0px;' align='center' valign='middle'>$clics</td>
        <td width='16%' class='texto3' style='border-left:0px;' align='center' valign='middle'><a href='$criticas'>[ver comentarios]</a></td>
    </tr>
"
;     
    } 
?>
Bueno la cuestion es que no se como plantear el if que compare fechas... y mostrar el resultado...

Lo que quiero es establecer un plazo de 15 dias comparados con la fecha actual NOW y si se cumple mostrar un resultado diferenciador (que indique que es nuevo) y si no se cumple que se muestren los campos normalmente.

En definitiva, es para resaltar en el query los datos menores de 15 dias con una imagen o texto.

saludos

Última edición por MindPaniC; 09/06/2006 a las 20:53
  #2 (permalink)  
Antiguo 08/06/2006, 08:46
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Desde mysql 4.1.1 tienes la funcion datediff() la cual te permite calcular los dias que median entre 2 fechas. Asi, podrías extraer en una consulta los registros con mas de 15 dias y los que tiene 15 dias o menos. Ejemplo:

Código PHP:
<?php
   $sql
="SELECT * FROM sets WHERE DATEDIFF(now(),fecha)>15 ORDER BY fecha DESC";
   
$rs=mysql_query();
   while()
   ....

   
$sql="SELECT * FROM sets WHERE DATEDIFF(now(),fecha)<=15 ORDER BY fecha DESC";
   
$rs=mysql_query();
   while()
   ....
  
?>
  #3 (permalink)  
Antiguo 09/06/2006, 18:02
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Mierda.... la base de datos de mi server es la versión 4.0.25..

tendre que filtrar datos mediante php.... con lo cual la pregunta retoma su inicio...

mmmm.......comiendome el coco.
  #4 (permalink)  
Antiguo 09/06/2006, 18:39
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
mmm como se compara una fecha sacada de MySQL con la fecha actual del server "date" para filtrar por antiguedad??????....

alguna idea?

Última edición por MindPaniC; 09/06/2006 a las 20:18
  #5 (permalink)  
Antiguo 09/06/2006, 20:48
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Tengo esto pero no me va....

me da este error:

Cita:
Fatal error: Cannot redeclare compara_fechas() (previously declared in /home/mindpani/public_html/sets/sets.php:126) in /home/mindpani/public_html/sets/sets.php on line 126
Código PHP:
<?php
$conexion 
mysql_connect("localhost","XXXXXXXXX","XXXXXXXX");
mysql_select_db("xxxxxxxxxx"$conexion) OR die("No se puede establecer la conexión a MySQL");
$sql mysql_query("SELECT * FROM sets ORDER BY fecha DESC") or die (mysql_error()); 
while (
$row mysql_fetch_array($sql)) { 
$id "$row[setid]"
$titulo "$row[setname]";
$link "$row[seturl]";
$autor "$row[setautor]";
$estilo "$row[estiloid]";
$duracion "$row[setduracion]";
$tamano "$row[setsize]";
$clics "$row[setclics]"
$criticas "$row[urlcriticas]";
$fecha "$row[fecha]";

function 
compara_fechas($fecha1,$fecha2)
{
    if (
preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha1))
        list(
$dia1,$mes1,$a&#241;o1)=split("/",$fecha1);
    
if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha1))
        list(
$dia1,$mes1,$a&#241;o1)=split("-",$fecha1);
    
if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha2))
        list(
$dia2,$mes2,$a&#241;o2)=split("/",$fecha2);
    
if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha2))
        list(
$dia2,$mes2,$a&#241;o2)=split("-",$fecha2);
    
$dif mktime(0,0,0,$mes1,$dia1,$a&#241;o1) - mktime(0,0,0, $mes2,$dia2,$año2);
    
return ($dif);
}
$fecha_actualDATE;
    if (
compara_fechas($fecha,$fecha_actual) <=15)
        echo 
"
    <tr>
        <td width='2%' class='texto2' style='border-right:0px;'><img src='http://www.mindpanic.com/foros/templates/chunkstyle/images/folder_new_big.gif'></td>
        <td width='41%' class='texto3'  style='border-left:0px;'><a href='descargar.php?id=$id&link="
.urlencode($link)."' class='ultimos'>$titulo</a><br />By $autor</td>
        <td width='20%' class='texto3' style='border-left:0px;' align='center' valign='middle'>$estilo</td>
        <td width='14%' class='texto3' style='border-left:0px;' align='center' valign='middle'>$tamano Mb.</td>
        <td width='5%' class='texto3' style='border-left:0px;' align='center' valign='middle'>$clics</td>
        <td width='18%' class='texto3' style='border-left:0px;' align='center' valign='middle'><a href='$criticas'>[ver comentarios]</a></td>
    </tr>
"
;
    if (
compara_fechas($fecha,$fecha_actual) >15)
        echo
"
    <tr>
        <td width='2%' class='texto2' style='border-right:0px;'><img src='http://www.mindpanic.com/foros/templates/chunkstyle/images/folder.gif'></td>
        <td width='41%' class='texto3'  style='border-left:0px;'><a href='descargar.php?id=$id&link="
.urlencode($link)."' class='ultimos'>$titulo</a><br />By $autor</td>
        <td width='20%' class='texto3' style='border-left:0px;' align='center' valign='middle'>$estilo</td>
        <td width='14%' class='texto3' style='border-left:0px;' align='center' valign='middle'>$tamano Mb.</td>
        <td width='5%' class='texto3' style='border-left:0px;' align='center' valign='middle'>$clics</td>
        <td width='18%' class='texto3' style='border-left:0px;' align='center' valign='middle'><a href='$criticas'>[ver comentarios]</a></td>
    </tr>
"
;     
    } 
?>
Ayuda pleaseeee!!!!!!!!!
  #6 (permalink)  
Antiguo 09/06/2006, 22:50
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Tengo este script para comparar fechas con la fecha actual del servidor o pc donde este alojado....

Código PHP:
<?php
function compara_fechas($fecha1,$fecha2)
{
    if (
preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha1))
        list(
$dia1,$mes1,$ano1)=split("/",$fecha1);
    if (
preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha1))
        list(
$dia1,$mes1,$ano1)=split("-",$fecha1);
    if (
preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha2))
        list(
$dia2,$mes2,$ano2)=split("/",$fecha2);
    if (
preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha2))
        list(
$dia2,$mes2,$ano2)=split("-",$fecha2);
    
$dif mktime(0,0,0,$mes1,$dia1,$ano1) - mktime(0,0,0$mes2,$dia2,$ano2);
    return (
$dif);                         
}
$f1="30/01/1993";
$f2date("j/n/Y");
if (
compara_fechas($f1,$f2) <0)
    echo 
"$f1 es menor que $f2 <br>";
if (
compara_fechas($f1,$f2) >0)
    echo 
"$f1 es mayor que $f2 <br>";
if (
compara_fechas($f1,$f2) ==0)
    echo 
"$f1 es igual  que $f2 <br>";
?>

Y estoy destripandolo para unirlo a mi script del query a la base de datos y asi poder diferenciar los datos por fecha indicando cuales son nuevos (15 dias o menos) y cuales viejos (a partir de 16 dias)

En realidad lo que busco es poder indicar en el resultado TOTAL del query en pantalla cuales registros son menores de 15 dias y cuales no lo son.

La cuestion es que en el intento del mensaje anterior no me sale... una orientación por favor.

Última edición por MindPaniC; 09/06/2006 a las 23:00
  #7 (permalink)  
Antiguo 10/06/2006, 03:08
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
Fatal error: Cannot redeclare compara_fechas() (previously declared in /home/mindpani/public_html/sets/sets.php:126) in /home/mindpani/public_html/sets/sets.php on line 126
Solo declara una vez la función... te esta diciendo dónde la declaraste anteriormente.

Si dices que el dato proviene de una BD, con campo DATE... ya probaste con:
Código PHP:
if(strtotime("-15 day") > strtotime($fecha)) { // $fecha el dato de la BD
    
echo "menos de 15 días";

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 10/06/2006, 04:22
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Gracias jam voy a probarlo, no conocia strtotime

A ver que me sale.

Última edición por MindPaniC; 10/06/2006 a las 04:46
  #9 (permalink)  
Antiguo 10/06/2006, 09:08
okram
Invitado
 
Mensajes: n/a
Puntos:
lo que podrias hacer es usar el formato timestamp de unix (que te dara el numero de segundos que paso desde el 01/01/1970 00:00:00 GMT -> http://www.conclase.net/c/mysql/inde...UNIX_TIMESTAMP

luego, con php, restas time() menos ese valor y lo conviertes a fecha con date() o gmdate(). Asi obtendras la diferencia de una manera sencilla y sin complicarte tanto con expresiones regulares para separar dias de meses de años de minutos de horas de segundos ....

Este fue mi pequeño aporte....

Salu2
  #10 (permalink)  
Antiguo 15/06/2006, 16:44
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Solucionado con la formula de Jam.

aqui lo podeis ver funcionando:

http://www.mindpanic.com/sets/sets.php

Mil gracias y saludos
  #11 (permalink)  
Antiguo 15/06/2006, 19:07
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Otra forma es usar la funcion unix_timestamp(fecha), asi:

Código PHP:
<?php
   $sql
="SELECT * FROM sets WHERE floor(((unix_timestamp(now())-unix_timestamp(fecha))/86400))>15 ORDER BY fecha DESC";
   
$rs=mysql_query();
   while()
   ....
?>

Última edición por claudiovega; 15/06/2006 a las 19:18
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 10:01.