概要
閲覧数:1737
投稿日:2017-01-13
更新日:2017-01-18
★秒前、★分前、★時間前、★日前などといった表示へ変換
1分未満
→ ★秒前
1時間未満
→ ★分前
1日未満
→ ★時間前
31日以内
→ ★日前
32日以上前
→ ★月★日
※32日以上前で、現在と年が異なる場合はyyyy年m月d日というように、「年」も含めて返す
※「date_default_timezone_set('Asia/Tokyo');」を指定しないと日時がズレる場合がある
コード
<?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){
date_default_timezone_set('Asia/Tokyo');
$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;
}
//2017/1/13 22:53:38 実行
echo convert_to_fuzzy_time("2017/1/13 22:52:03"); //35秒前
echo convert_to_fuzzy_time("2017/1/13 22:50:03"); //2分前
echo convert_to_fuzzy_time("2017/1/13 22:28:03"); //24分前
echo convert_to_fuzzy_time("2017/1/12 22:28:03"); //1日前
echo convert_to_fuzzy_time("2017/1/9 22:28:03"); //4日前
echo convert_to_fuzzy_time("2016/2/19 22:28:03"); //2016年2月19日結果
35秒前 2分前 24分前 1日前 4日前 2016年2月19日