最近のSNSは投稿日時を「X分前」「X日前」といった表記にしていることが多いですね。こういった表記がPHPで必要になったので関数作りました。
fuzzy_time.php (Gist)
関数概要
strtotime()で変換できる文字列(例:2013/2/19 22:28:03)を引数に与えると、「X日前」といった表記にして返します。返す文字列は下記の通り。
- 1分未満はX秒前
- 1時間未満はX分前
- 1日未満はX時間前
- 31日以内はX日前
- 32日以上前の場合はX月X日といった文字列を返す。
- 32日以上前で、現在と年が違う場合はyyyy年m月d日というように、「年」も含めて返す
fuzzy_time.php
<?php
/**
* X秒前、X分前、X時間前、X日前などといった表示に変換する。
* 一分未満は秒、一時間未満は分、一日未満は時間、
* 31日以内はX日前、それ以上はX月X日と返す。
* X月X日表記の時、年が異なる場合はyyyy年m月d日と、年も表示する
*
* @param <String> $time_db strtotime()で変換できる時間文字列 (例:yyyy/mm/dd H:i:s)
* @return <String> X日前,などといった文字列
**/
function convert_to_fuzzy_time($time_db){
$unix = strtotime($time_db);
$now = time();
$diff_sec = $now - $unix;
if($diff_sec < 60){
$time = $diff_sec;
$unit = "秒前";
}
elseif($diff_sec < 3600){
$time = $diff_sec/60;
$unit = "分前";
}
elseif($diff_sec < 86400){
$time = $diff_sec/3600;
$unit = "時間前";
}
elseif($diff_sec < 2764800){
$time = $diff_sec/86400;
$unit = "日前";
}
else{
if(date("Y") != date("Y", $unix)){
$time = date("Y年n月j日", $unix);
}
else{
$time = date("n月j日", $unix);
}
return $time;
}
return (int)$time .$unit;
}
ご自由にアレンジしてお使い下さいませ。