web-dev-qa-db-fra.com

Temps relatif sur les posts

Je cherche un moyen d'ajouter du code à mon modèle wordpress pour afficher l'heure d'un message en termes relatifs. Ainsi, si, par exemple, j'ai posté quelque chose il y a 5 minutes, il afficherait quelque chose du type posté il y a 6 minutes, ou 2 jours ou 1 semaine. Vous avez eu l'idée. Quelqu'un pourrait-il me donner des indications sur la manière dont je pourrais y parvenir?

2
Adam Thompson

WordPress a en fait une fonction obscure et peu connue appelée human_time_diff() qui fait cela. Il faut deux arguments; le premier est l'horodatage antérieur et le second est l'horodatage supérieur. Les deux doivent être des horodatages Unix. Le premier argument est obligatoire, mais le second est facultatif et utilisera time() s'il est laissé vide. Ainsi, par exemple, dans la boucle, vous pouvez faire ceci:

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

La fonction ne fera que quelques minutes, heures et jours, cependant. Si vous avez besoin de semaines, par exemple, vous pouvez faire quelque chose comme ceci:

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

Cela vous donnerait N week(s) sous forme de chaîne.

3
John P Bloch

Vous pouvez également essayer la fonction time_since():

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);
}

appelez comme ça:

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

Je pense ceci est la source originale du code

0
onetrickpony