it-swarm.com.de

Relative Zeit für Posts

Ich suche nach einer Möglichkeit, meiner WordPress-Vorlage Code hinzuzufügen, um die Zeit eines Posts in relativen Begriffen anzuzeigen. Wenn ich zum Beispiel vor 5 Minuten etwas gepostet habe, würde dies etwas in der Art von Gepostet vor 6 Minuten oder vor 2 Tagen oder vor 1 Woche aussagen. Du hast die Idee. Könnte mir jemand eine Anleitung geben, wie ich das machen könnte?

2
Adam Thompson

WordPress hat tatsächlich eine obskure und wenig bekannte Funktion namens human_time_diff(), die dies tut. Es braucht zwei Argumente; Der erste ist der frühere Zeitstempel, und der zweite ist der spätere Zeitstempel. Beide sollten Unix-Zeitstempel sein. Das erste Argument ist erforderlich, das zweite ist optional und verwendet time(), wenn es leer gelassen wird. So könnten Sie beispielsweise in der Schleife Folgendes tun:

<p>Posted <?php echo human_time_diff( get_the_time( 'U' ) ); ?> ago.</p>

Die Funktion kann jedoch nur Minuten, Stunden und Tage ausführen. Wenn Sie beispielsweise Wochen benötigen, können Sie Folgendes tun:

$diff = explode( ' ', human_time_diff( get_the_time( 'U' ) ) );
if( $diff[1] == 'days' && 7 <= $diff[0] ){
  $diff[1] = 'week';
  $diff[0] = round( (int)$diff[0] / 7 );
  if( $diff[0] > 1 )
    $diff[1] .= 's';
  $diff = implode( ' ', $diff );
}

Das würde dir N week(s) als String geben.

3
John P Bloch

Sie können auch die Funktion time_since() ausprobieren:

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

  $newer_date = ($newer_date == false) ? (time()+(60*60*get_option("gmt_offset"))) : $newer_date;
  $since = $newer_date - $older_date;

  foreach ($chunks as $key => $seconds)
    if (($count = floor($since / $seconds)) != 0) break;

  $messages = array(
    'year'   => _n('%s year ago', '%s years ago', $count),
    'month'  => _n('%s month ago', '%s months ago', $count),
    'week'   => _n('%s week ago', '%s weeks ago', $count),
    'day'    => _n('%s day ago', '%s days ago', $count),
    'hour'   => _n('%s hour ago', '%s hours ago', $count),
    'minute' => _n('%s minute ago', '%s minutes ago', $count),
    'second' => _n('%s second ago', '%s seconds ago', $count),
  );
  return sprintf($messages[$key],$count);
}

nenne es wie:

echo time_since(abs(strtotime($post->post_date." GMT"));

Ich denke, dass dies die ursprüngliche Quelle des Codes ist

0
onetrickpony