2012-07-18 10 views
13

Ich bekomme eine Liste von Elementen aus meiner Datenbank, jeder hat eine CURRENT_TIMESTAMP, die ich in 'x Minuten vor' mit Hilfe von timeago geändert habe. Das funktioniert also gut. Aber das Problem ist, ich möchte auch ein "NEUES" Banner auf Artikel, die weniger als 30 Minuten alt sind. Wie kann ich den generierten Zeitstempel (zum Beispiel: 2012-07-18 21:11:12) und sagen, wenn es weniger als 30 Minuten von der aktuellen Zeit ist, dann echo das "NEW" Banner auf diesem Artikel.PHP Überprüfen, ob Timestamp weniger als 30 Minuten alt ist

+0

Ich finde es interessant, wie niemand Zeit() - 30 * 60 empfiehlt, frage mich, ob ich der einzige bin, der mit Unix-Zeitstempeln als Ganzzahlen direkt arbeiten. – Mahn

Antwort

46

Verwenden Sie strtotime ("-30 Minuten") und sehen Sie, ob der Zeitstempel Ihrer Zeile größer ist.

Beispiel:

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

Ich verwende strtotime() zweimal hier Unix-Zeitstempel für Ihr MySQL Datum zu erhalten, und dann wieder zu bekommen, was der Zeitstempel vor 30 Minuten betrug. Wenn der Zeitstempel vor 30 Minuten größer als der Zeitstempel des MySQL-Datensatzes ist, muss er mehr als 30 Minuten erstellt worden sein.

+0

Keine Punkte für die Kürze würde es erscheinen. –

+0

+1. Vielen Dank. Dies ist ein besserer Weg, dies zu tun als das, was ich gemacht habe. Ich mache derzeit: 'if ($ post_date <(time() - 600)) aber mit' strtotime() ', aber es in normales Englisch zu setzen ist ein bisschen einfacher als die Anzahl der Sekunden zu finden, um zu subtrahieren :) – Nathan

+0

@ user1511331 Sie sollten diese Antwort akzeptieren (siehe [Wie funktioniert die Annahme einer Antwort?]) (Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)) half dir. – Nathan

6

Versuchen Sie, wie das ist etwas, PHP mit DateTime Objekt:

$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"; 
} 

Edit: Mike richtig ist, habe ich vergessen, dass aus irgendeinem Grund nur %a tatsächlich die Summe seiner Art gibt (in diesem Fall Tage). Alle anderen dienen zum Anzeigen der Zeitformatierung. Ich habe das obige erweitert, um tatsächlich zu arbeiten.

+0

Dies wird nicht funktionieren. Wenn die Zeitdifferenz 1 Stunde 29 Minuten beträgt, wird '$ diff-> Format (" i ")" 29 sein. – Mike

+0

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

+0

@Mike Ich habe das vergessen, und ich nehme an, dass ich das bekomme, weil ich den Code nicht getestet habe. Ich habe es diesmal getestet und es funktioniert wie erwartet. =) – Crontab

Verwandte Themen