php处理时间格式:几秒前,几分钟前,几小时前,几天前,几个月前,几年后 ,或者 几秒后,几分钟后,几小时后,几天后,几个月后,几年后

在网页应用中,经常会遇到时间显示为:几秒前,几分钟前,几小时前,几天前,几个月前,几年后 ,或者 几秒后,几分钟后,几小时后,几天后,几个月后,几年后。像这样的应用,除了在我们自己的博客会遇到外,更多的类似于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.在 拼接之前得到的(前/后)返回值 就可以了。

发表评论

邮箱地址不会被公开。 必填项已用*标注