2012-07-18 15 views
13

Obtengo una lista de elementos de mi base de datos, cada uno tiene un CURRENT_TIMESTAMP que he cambiado a 'x minutes' con la ayuda de timeago. Así que está funcionando bien. Pero el problema es que también quiero una pancarta "NUEVA" en los artículos que tienen menos de 30 minutos de antigüedad. ¿Cómo puedo tomar la marca de tiempo generada (por ejemplo: 2012-07-18 21:11:12) y decir si está a menos de 30 minutos de la hora actual, y repetir el letrero "NUEVO" en ese elemento.PHP Comprobando si la marca de tiempo es menor de 30 minutos

+0

Me parece interesante cómo nadie sugiere usar time() - 30 * 60, me pregunto si soy el único que trabaja con las marcas de tiempo de Unix como enteros directamente. – Mahn

Respuesta

46

Use strtotime ("-30 minutos") y luego vea si la marca de tiempo de su fila es mayor que esa.

Ejemplo:

<?php 
if(strtotime($mysql_timestamp) > strtotime("-30 minutes")) { 
$this_is_new = true; 
} 
?> 

estoy usando strtotime() dos veces aquí para obtener sellos de tiempo UNIX para su fecha de MySQL, y luego otra vez para conseguir lo que la marca de tiempo fue hace 30 minutos. Si la marca de tiempo de hace 30 minutos es mayor que la marca de tiempo del registro de mysql, entonces debe haberse creado más de 30 minutos.

+0

No hay puntos para la brevedad que parece. –

+0

+1. Gracias. Esta es una mejor forma de hacer esto que lo que he estado haciendo. Actualmente hago: 'if ($ post_date <(time() - 600))' pero usando 'strtotime()' pero ponerlo en inglés normal es un poco más fácil que encontrar el número de segundos para restar :) – Nathan

+0

@ user1511331 Debe aceptar esta respuesta (consulte [¿Cómo funciona la aceptación de una respuesta?] (Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)) ya que te ayudó. – Nathan

6

intentar algo como esto, usando DateTime objeto de PHP:

$now = new DateTime(); 
$then = DateTime($timestamp); // "2012-07-18 21:11:12" for example 
$diff = $now->diff($then); 
$minutes = ($diff->format('%a') * 1440) + // total days converted to minutes 
      ($diff->format('%h') * 60) + // hours converted to minutes 
      $diff->format('%i');   // minutes 
if ($minutes <= 30) { 
    echo "NEW"; 
} 

Editar: Mike es correcto, se me olvidaba que por cualquier razón, sólo %a realidad devuelve el total de su tipo (en este caso los días) Todos los demás son para mostrar el formato de tiempo. He extendido lo anterior para que realmente funcione.

+0

Esto no funcionará. Si la diferencia horaria es de 1 hora y 29 minutos, el formato '$ diff-> (" i ")' será 29. – Mike

+0

'$ interval = new DateInterval ('PT1H29M'); echo $ interval-> format ('% i minutes'); 'echoes" 29 minutes " – Mike

+0

@Mike Me olvidé de eso, y supongo que eso es lo que obtengo por no probar realmente el código. Lo ** hice ** la prueba esta vez y funciona como se esperaba. =) – Crontab

Cuestiones relacionadas