UNIXタイムスタンプをFacebookやTwitterのように表示するように変換しようとしています。たとえば、twitter / facebookに投稿されたツイートやコメントを見ると、次のように日付/時刻が表示されます。
「2分前」または「2日前」または「2週間前」
このように機能させるための関数を知っている人はいますか?カスタムのものになると思います。
どんな助けでも大歓迎です
UNIXタイムスタンプをFacebookやTwitterのように表示するように変換しようとしています。たとえば、twitter / facebookに投稿されたツイートやコメントを見ると、次のように日付/時刻が表示されます。
「2分前」または「2日前」または「2週間前」
このように機能させるための関数を知っている人はいますか?カスタムのものになると思います。
どんな助けでも大歓迎です
PHPを使用している場合は、MattJonesによって投稿された次の関数を試してみてください。
// DISPLAYS COMMENT POST TIME AS "1 year, 1 week ago" or "5 minutes, 7 seconds ago", etc...
function time_ago($date,$granularity=2) {
$date = strtotime($date);
$difference = time() - $date;
$periods = array('decade' => 315360000,
'year' => 31536000,
'month' => 2628000,
'week' => 604800,
'day' => 86400,
'hour' => 3600,
'minute' => 60,
'second' => 1);
foreach ($periods as $key => $value) {
if ($difference >= $value) {
$time = floor($difference/$value);
$difference %= $value;
$retval .= ($retval ? ' ' : '').$time.' ';
$retval .= (($time > 1) ? $key.'s' : $key);
$granularity--;
}
if ($granularity == '0') { break; }
}
return ' posted '.$retval.' ago';
}
また、設定されたタイマーのすべての時間フィールドを自動的に更新するjquery timeagoプラグインが気に入っているので、ユーザーがページにしばらく滞在しても最新の状態になります。レンダリング時にUNIX時間をISO8601形式に変換する必要がありますが、そのためのphp関数があると思います。
数秒で時間がかかり、うまく機能するシンプルなスクリプト
function twitter_time($time) {
$delta = time() - strtotime($time);
if ($delta < 60) {
return '30sec ago';
} else if ($delta < 120) {
return '1m ago';
} else if ($delta < (60 * 60)) {
return floor($delta / 60) . 'm ago';
} else if ($delta < (120 * 60)) {
return '1h ago';
} else if ($delta < (24 * 60 * 60)) {
return floor($delta / 3600) . 'h ago';
} else if ($delta < (48 * 60 * 60)) {
return '1d ago';
} else if ($delta < (86400*7)) {
return floor($delta / 86400) . 'd ago';
} else if ($delta < (2*86400*7)) {
return '1week ago';
} else if ($delta < (2592000)) {
return floor($delta / (86400*7)) . 'weeks ago';
} else if ($delta < (2*2592000)) {
return '1mon ago';
} else if ($delta < (31104000)) {
return floor($delta / 2592000) . 'mon ago';
} else if ($delta < (2*31104000)) {
return '1year ago';
} else {
return number_format(floor($delta / 31104000)) . 'years ago';
}
}