在网页应用中,经常会遇到时间显示为:几秒前,几分钟前,几小时前,几天前,几个月前,几年后 ,或者 几秒后,几分钟后,几小时后,几天后,几个月后,几年后。像这样的应用,除了在我们自己的博客会遇到外,更多的类似于QQ空间社交类的站点应用就更广了。。
在QQ空间中,经常看到某某好友几分钟或几秒钟发表了某篇说说,或上传了某个图片之类的,还有在新流微博中,对于时间的计算也非常的精细,类如某个明星几秒钟之前发表了一篇微博,总之,时间的计算在SNS的社交网络中显得非常重要,毕竟SNS社交网络重视的是新闻的即时性,快速性。
那么使用PHP怎样来计算时间呢,其实原理也是很简单的,通俗的来讲就是将“现在的时间”减去“发表新闻的时间”就等于“距离的时间”,这个说得不是哪么准确,但为了能够理解吧,也就是时间的加减法,这里写了一个PHP的时间计算函数,看如下函数代码:
<?php header("Content-type:text/html;charset=utf-8"); function format_date($time){ $t=time()-strtotime($time); if($t>0){$ba = '前';}else{$ba = '后';} /* echo date("Y-m-d H:i:s",time()); echo '<hr/>'; echo date("Y-m-d H:i:s",strtotime($time)); echo '<hr/>'; echo date("Y-m-d H:i:s",$t); echo '<hr/>'; echo $t; echo '<hr/>'; */ $f=array( '31536000'=>'年', '2592000'=>'个月', '604800'=>'星期', '86400'=>'天', '3600'=>'小时', '60'=>'分钟', '1'=>'秒' ); foreach ($f as $k=>$v) { if (0 !=$c=floor(abs($t)/(int)$k)) { return $c.$v.$ba; } } } echo format_date(date("Y-m-d H:i:s",time()-50)); ?>
程序的算法:
1. 把时间格式文本,转化为秒数 减去 当前时间,得到时间差 $t(秒数);
2. 判断时间差 是正数 还是 负数,如果是正数就是xxx前(1秒前),如果是负数 就是xxx后(1秒后);
3.是时间差$t 的绝对值 去分别除以 年,月,星期,天,时,分,秒 的秒数,去正数部分。直到不等于0 结束。就得到了 对应的 时间 和 时间单位。
4.在 拼接之前得到的(前/后)返回值 就可以了。