2010-06-19 13 views
7

Tengo un registro devuelto de MySQL que tiene un campo de fecha y hora. Lo que quiero hacer es tomar este valor y ver si es anterior a las 24 horas, supongo que usar el tiempo de PHP() para obtener la hora actual.Comprobando si mySql datetime es anterior a 1 día de php ahora()

En el momento si los echo a cabo me sale:

1276954824   this is php's time() 
2010-06-19 09:39:23 this is the MySQL datetime 

supongo que el de arriba es un tiempo de Unix? He estado jugando con strtotime pero sin mucho éxito ...

CUALQUIER ayuda ¡bienvenido!

Respuesta

26

¿No tuvo éxito?

echo strtotime("2010-06-19 09:39:23"); 

me da

1276940363 

(mktime(9, 39, 23, 6, 19, 2010) da al mismo tiempo, por lo que el análisis sintáctico funciona correctamente)


Para obtener las diferencias de segundos, puede restar las marcas de tiempo , p.ej

$diff = time() - strtotime("2010-06-19 09:39:23"); 

Si las diferencias son mayores que 86400 (60 * 60 * 24) segundos, a continuación, las marcas de tiempo de más de un día de diferencia:

if(time() - strtotime("2010-06-19 09:39:23") > 60*60*24) { 
    // timestamp is older than one day 
} 
+0

Muchas gracias, mi cabeza no parecía estar bien atornillada hoy! –

3

¿Por qué mezclar tiempos de PHP y tiempos de MySQL?

En su lugar, hacer la comparación directa en MySQL:

para obtener la fecha/hora actual en MySQL utilizar la función NOW(). Puede comparar, por ejemplo, 2010-06-19 09:39:23' < DATE_SUB(NOW(), INTERVAL 1 DAY)

Esto verificaría si la fecha dada (presumiblemente en una columna) es anterior a 24 horas.

Si es absolutamente necesario convertir una marca de tiempo MySQL a una marca de tiempo UNIX, puede usar la función UNIX_TIMESTAMP() de MySQL para hacerlo.

+1

Lo haría pero por el momento no tengo acceso a la consulta, por eso tengo que hacerlo con los valores devueltos. –

9

También puede hacer:

SELECT * FROM my_table WHERE timestamp < NOW() - INTERVAL 1 DAY; 
+1

DATE_SUB (CURDATE(), INTERVALO 1 DÍA) es la forma correcta de hacerlo –

+1

@Zahid: ¿Qué pasa con la solución que publiqué? –

0

Escribí una función, mediante la cual puede determinar si la primera fecha dada es un día o n días más grandes o más pequeños que la segunda fecha dada.

$date1 = "2013/03/01"; 
$date2 = "2013/03/01"; 
$sign = "-"; 
$diff = 1; 
$result = isDaysSmallerBigger($date1, $date2, $sign, $diff); 
var_dump($result); 

/** 
* Note: this function is only supported in php 5.3 or above 
* 1. If $date1 - $date2 = $sign $diff days, return true; 
* 2. If $date1 equals $date2 and $diff euqals 0, whether $sign is "+" or "-", return true 
* 3. Else return false; 
* @param unknown_type $date1 
* @param unknown_type $date2 
* @param string $sign: "-": $date1 < $date2; "+": $date1 > $date2; 
* Besides if $diff is 0, then both "-" and "+" means $date1 === $date2; 
* @param integer $diff: date difference between two given dates 
*/ 
function isDaysSmallerBigger($date1, $date2, $sign, $diff) { 
    $dateTime1 = new DateTime($date1); 
    $dateTime2 = new DateTime($date2); 

    $interval = $dateTime2->diff($dateTime1); 
    $dayDiff = $interval->format('%a'); 
    $diffSign = $interval->format('%R'); 

    if((int)$dayDiff === (int)$diff) { 
     // Correct date difference 

     if((int)$diff !== 0) { 
      // Day difference is not 0 
      if($diffSign === $sign) { 
      return true; 
      } else { 
      return false; 
      } 
     } else if((int)$diff === 0) { 
      // Day difference is 0, then both given "+" and "-" return true 
      return true; 
     } 
    } else { 
     // Incorrect date difference 
     return false; 
    } 
}