PHP:从时间戳生成相对日期/时间我基本上试图将Unix时间戳(time()函数)转换为兼容过去和未来日期的相对日期/时间。所以产出可能是:2个星期前1小时60分钟前15分54秒前10分15秒后首先我尝试编写这个代码,但是创建了一个巨大的无法维护的功能,然后我在互联网上搜索了几个小时,但我能找到的只是一部分时间的脚本(呃:“1小时前”没有纪要)。你有一个已经这样做的脚本吗?
9 回答
慕码人8056858
TA贡献1803条经验 获得超6个赞
此功能为您提供“1小时前”或“明天”之类的“现在”和“特定时间戳”之间的结果。
function time2str($ts){ if(!ctype_digit($ts)) $ts = strtotime($ts); $diff = time() - $ts; if($diff == 0) return 'now'; elseif($diff > 0) { $day_diff = floor($diff / 86400); if($day_diff == 0) { if($diff < 60) return 'just now'; if($diff < 120) return '1 minute ago'; if($diff < 3600) return floor($diff / 60) . ' minutes ago'; if($diff < 7200) return '1 hour ago'; if($diff < 86400) return floor($diff / 3600) . ' hours ago'; } if($day_diff == 1) return 'Yesterday'; if($day_diff < 7) return $day_diff . ' days ago'; if($day_diff < 31) return ceil($day_diff / 7) . ' weeks ago'; if($day_diff < 60) return 'last month'; return date('F Y', $ts); } else { $diff = abs($diff); $day_diff = floor($diff / 86400); if($day_diff == 0) { if($diff < 120) return 'in a minute'; if($diff < 3600) return 'in ' . floor($diff / 60) . ' minutes'; if($diff < 7200) return 'in an hour'; if($diff < 86400) return 'in ' . floor($diff / 3600) . ' hours'; } if($day_diff == 1) return 'Tomorrow'; if($day_diff < 4) return date('l', $ts); if($day_diff < 7 + (7 - date('w'))) return 'next week'; if(ceil($day_diff / 7) < 4) return 'in ' . ceil($day_diff / 7) . ' weeks'; if(date('n', $ts) == date('n') + 1) return 'next month'; return date('F Y', $ts); }}
心有法竹
TA贡献1866条经验 获得超5个赞
function relativeTime($time) { $d[0] = array(1,"second"); $d[1] = array(60,"minute"); $d[2] = array(3600,"hour"); $d[3] = array(86400,"day"); $d[4] = array(604800,"week"); $d[5] = array(2592000,"month"); $d[6] = array(31104000,"year"); $w = array(); $return = ""; $now = time(); $diff = ($now-$time); $secondsLeft = $diff; for($i=6;$i>-1;$i--) { $w[$i] = intval($secondsLeft/$d[$i][0]); $secondsLeft -= ($w[$i]*$d[$i][0]); if($w[$i]!=0) { $return.= abs($w[$i]) . " " . $d[$i][1] . (($w[$i]>1)?'s':'') ." "; } } $return .= ($diff>0)?"ago":"left"; return $return;}
用法:
echo relativeTime((time()-256));4 minutes 16 seconds ago
- 9 回答
- 0 关注
- 683 浏览
添加回答
举报
0/150
提交
取消