web-dev-qa-db-ja.com

投稿の相対時間

相対的な観点で投稿の時間を表示するために私のワードプレスのテンプレートにコードを追加できる方法を探しています。したがって、たとえば、5分前に投稿した場合、6分前または2日前、または1週間前の投稿に沿って何かが表示されます。あなたはアイデアを得ます。誰かが私がこれをやることについてどうやって行けばよいかについていくつかの手引きを教えてもらえますか?

2
Adam Thompson

WordPressには、実際にはこれを行うhuman_time_diff()という、あいまいであまり知られていない関数があります。これは2つの引数を取ります。最初のものは早いタイムスタンプです、そして、2番目のものは遅いタイムスタンプです。両方ともUnixタイムスタンプであるべきです。最初の引数は必須ですが、2番目の引数はオプションであり、空のままにするとtime()が使用されます。したがって、たとえば、ループ内でこれを実行できます。

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

ただし、この機能は数分、数時間、数日しか実行できません。たとえば、数週間かかる場合は、次のようにします。

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

それはあなたにN week(s)を文字列として与えるでしょう。

3
John P Bloch

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

ようにそれを呼ぶ:

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

私は これ がコードの元のソースだと思います

0
onetrickpony