Wie kann man "vor 12 Minuten" auf einer PHP-Webseite anzeigen?


22

Kann mir jemand sagen, wie ich eine Statusmeldung wie "vor 12 Sekunden" oder "vor 5 Minuten" auf einer Webseite anzeigen kann? Hier

  0

Diese Frage wurde [zuvor gefragt] (http://stackoverflow.com/questions/11/how-do-i-calculate-relative-time), sollte der Beispielcode in Antworten ziemlich einfach zu PHP zu konvertieren. 20 aug. 082008-08-20 20:07:06

+1

Dies wurde in [this thread] (http://stackoverflow.com/questions/11/how-do-i-calculate-relative-time) behandelt (allerdings mit mehr Fokus auf C#). 20 aug. 082008-08-20 20:05:18

  0

große Frage :) 24 apr. 132013-04-24 12:30:28

  0

Es gibt eine schöne jquery Plugin: timeago.js 27 apr. 132013-04-27 04:46:05

63

ist der PHP-Code für das gleiche:

function time_since($since) { 
    $chunks = array(
     array(60 * 60 * 24 * 365 , 'year'), 
     array(60 * 60 * 24 * 30 , 'month'), 
     array(60 * 60 * 24 * 7, 'week'), 
     array(60 * 60 * 24 , 'day'), 
     array(60 * 60 , 'hour'), 
     array(60 , 'minute'), 
     array(1 , 'second') 
    ); 

    for ($i = 0, $j = count($chunks); $i < $j; $i++) { 
     $seconds = $chunks[$i][0]; 
     $name = $chunks[$i][1]; 
     if (($count = floor($since/$seconds)) != 0) { 
      break; 
     } 
    } 

    $print = ($count == 1) ? '1 '.$name : "$count {$name}s"; 
    return $print; 
} 

Die Funktion nimmt die Anzahl von Sekunden als Ein- und Ausgänge Text wie:

  • 10 Sekunden
  • 1 Minute

usw.

  0

Schöne Funktion :) 23 aug. 092009-08-23 20:44:54

  0

Oh, und vergessen Sie nicht, diese Multiplikationen mit den realen Werten zu ändern, so dass es nicht jedes Mal berechnet wird, wenn es läuft:) 23 aug. 092009-08-23 21:07:39

+10

Da ich neugierig war, war die Ersetzung der Multiplikation Sequenzen mit den bewerteten Produkten ~ 1,2% schneller. 24 aug. 092009-08-24 01:04:06

+5

Es zeigt nur '33 Minuten' an, egal, was ich das Datum und die Zeit zu 24 feb. 132013-02-24 18:18:02

+5

@ErikEdgren ändere Ich hatte dasselbe Problem, weil ich Datum anstelle von Sekunden sendete. Versuchen Sie Folgendes: 'time_since (time() - strtotime ($ datetime))' 02 aug. 132013-08-02 15:12:54

  0

TWEAK MIT JETZT JETZT. Funktion time_since ($ seit) { \t $ chunks = Array (Array (60 * 60 * 24 * 365, 'Jahr'), Array (60 * 60 * 24 * 30, 'Monat'), Array (60 * 60 *) 24 * 7, 'Woche'), Array (60 * 60 * 24, 'Tag'), Array (60 * 60, 'Stunde'), Array (60, 'Minute'), Array (1, 'sec')); \t für ($ i = 0, $ j = zählen ($ chunks); $ i <$ j; $ i ++) { \t \t $ Sekunden = $ Chunks [$ i] [0]; \t \t $ name = $ chunks [$ i] [1]; \t $ count = floor ($ seit/$ Sekunden); \t if ($ count! = 0) {break;} \t} if ($ count == 1) {\t \t Rückgabe $ print = '1'. $ Name;} sonst if ($ count <1) {return \t $ print = 'gerade jetzt'; \t} else {\t return $ print = "$ count {$ name} s";}} 31 jan. 182018-01-31 23:26:33


7
function timeAgo($timestamp){ 
    $datetime1=new DateTime("now"); 
    $datetime2=date_create($timestamp); 
    $diff=date_diff($datetime1, $datetime2); 
    $timemsg=''; 
    if($diff->y > 0){ 
     $timemsg = $diff->y .' year'. ($diff->y > 1?"'s":''); 

    } 
    else if($diff->m > 0){ 
    $timemsg = $diff->m . ' month'. ($diff->m > 1?"'s":''); 
    } 
    else if($diff->d > 0){ 
    $timemsg = $diff->d .' day'. ($diff->d > 1?"'s":''); 
    } 
    else if($diff->h > 0){ 
    $timemsg = $diff->h .' hour'.($diff->h > 1 ? "'s":''); 
    } 
    else if($diff->i > 0){ 
    $timemsg = $diff->i .' minute'. ($diff->i > 1?"'s":''); 
    } 
    else if($diff->s > 0){ 
    $timemsg = $diff->s .' second'. ($diff->s > 1?"'s":''); 
    } 

$timemsg = $timemsg.' ago'; 
return $timemsg; 
} 
  0

Ich habe eine modifizierte Version davon verwendet, ich ersetzte die date_create Zeile durch $ datetime2 = new DateTime(); $ datetime2-> setTimestamp ($ timestamp); und entfernte alle Apostrophe vor der s-Zeichenfolge 02 aug. 162016-08-02 09:30:10


3

PHP \DateTime::diff gibt eine \DateInterval Objekt, auf dem Sie die Minuten von der öffentlichen i Eigentum erhalten können.