概要
閲覧数:1476
投稿日: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日