邪罗刹的菠萝阁


> ╮( ̄▽ ̄)╭,话说上次函数有一点点的小杯具。Qiqiboy 表示,那函数效率灰常低,而且忘记用除法鸟。
> 小邪表示灰常蛋疼,所以进行了大量研究,恩恩,灰常大量,因为 Chrome 标签已经看不到标题鸟。

一. 代码改进:

> 先让我们一起研究一下原先的代码,貌似效率特别低,o(╯□╰)o 杯具,当时小邪滴脑袋木有转过弯来。
> 居然没有想到除法取整,愣是用循环达到除法的目的,额滴神,(PД`q。)·。'゜ 冰天雪地掩面泪奔。

foreach ($info as $val) {
	$count = 0;
	while ($inte - $val[0] > 0) {
		$inte = $inte - $val[0];
		$count++;
	}
	if ($count<>0) { $res .= $count.$val[1]; }
}
//foreach 要执行四次,因为 $info 数组的外层数组有 4 维
//如果时间差恰好为 1 天,While 要执行最少 24 次,最多 23+59+59 次
//每次 While 的时候,$count 要自加一次,$inte 要减一次
//总的来说,时间为一天的话,大概执行了 141*4 次自加和减法
//如果时间不止一天而是一年的话,就杯具了,超多 - -

> 话说 Qiqiboy 说的以前有更好的代码,小邪好像没有找到,要么是判断超多的,要么也有不少循环。
> Qiqiboy 上次说:"而且你用foreach会和数组中每个数值进行比较一遍做判断,这个也可以避免"。
> 唔,关于这个问题,要么除了用超多的判断来代替循环,小邪倒是木有想到其他的可用过程。
> 所以这次依然使用循环来看看,感觉超多的判断开销其实也不小,还不如省一些代码的空间来着。

foreach ($info as $val) {
	if ($inte >= $val[0]) {
		$tmp = floor($inte/$val[0]);
		$res .= $tmp.$val[1];
		$inte = $inte - $tmp*$val[0];
	}
}
//虽然还是有 foreach 函数,不过这个提供了可定制性,具体下面有介绍
//Foreach 循环四次,每次循环进行一次判断、一次除法取整、一次减法乘法
//无论时间为多长,只会进行 4 次判断、除法、取整、减法、乘法,感觉应该蛮好的

二. WP个性化评论时间函数 v1.01:

/* 小邪的个性化评论时间函数 v1.01 Start */
function evlos_funtime($gmto) {
	$set = 7*24*60*60; //在这里设定要个性化时间的秒数范围
	$gmt = strtotime($gmto);
	$inte = strtotime(gmdate('Y-m-j G:i:s')) - $gmt;
	$info = array(array(86400,'天'),array(3600,'小时'),array(60,'分钟'),array(1,'秒'));
	//你可以自由定制,可以去除 ,array(1,'秒') 这样就只会精确到分钟
	if ($inte <= $set) {
		foreach ($info as $val) {
			if ($inte >= $val[0]) {
				$tmp = floor($inte/$val[0]);
				$res .= $tmp.$val[1];
				$inte = $inte - $tmp*$val[0];
			}
		}
		if ($res=='') {$res='0s';}
		echo $res = '在'.$res.'之前';
	}
	else {
		echo $res = date(get_settings('date_format').' \a\t '.get_settings('time_format'),$gmt+get_settings("gmt_offset")*3600);
	}
}
/* 小邪的个性化评论时间函数 v1.01 End */

三. 关于这个函数的可定制性:

$info = array(array(86400,'天'),array(3600,'小时'),array(60,'分钟'),array(1,'秒'));
//你可以自由定制,可以去除 ,array(1,'秒') 这样就只会精确到分钟
//可以在 array(86400,'天'), 前面增加 array(604800,'周'), 来显示单位周
//还可以增加 array(2592000,'月'), 来显示单位月

//注意,单位一定要从大到小排列,不然会杯具喔 _( ̄0 ̄)_

四. 用官方函数的超短代码:

> Human_time_diff 函数 - http://codex.wordpress.org/Function_Reference/human_time_diff

<?php echo human_time_diff(get_the_time('U'), current_time('timestamp')) . '之前'; ?>
//日志发布时间个性化
<?php echo human_time_diff(get_comment_time('U'), current_time('timestamp')) . '之前'; ?>
//评论时间个性化

//注意咯,这个函数只提供 "x分钟之前" "x小时之前" "x天之前" 的效果,木有 "x分钟x秒之前"

> 把上面的这些放到需要显示个性化时间的位置即可,具体可查看上一篇文章的方法。
> 地址 - http://www.evlos.org/2010/08/03/comments-date-style

<?php echo human_time_diff(strtotime($comment->comment_date_gmt), strtotime(gmdate('Y-m-j G:i:s'))) . '之前'; ?>
//你知道的,因为小邪VPS时间杯具事件,所以不得不绕一个大弯,o(╯□╰)o
//时间正常的童鞋请拿上面的代码,而这里的代码能在时间最杯具的时候挺住 ( ̄y▽ ̄)╭ Ohoho ..

五. 奇特的 Floor 取整函数:

$int = 9.99; echo floor($int); // returns 9
$int = 4.55555; echo floor($int); // returns 4
$int = 1.11111; echo floor($int); // returns 1
$int = 0.99999999999999999; echo floor($int); // returns 1
$int = 0.9999999999999999; echo floor($int); // returns 0
$int = -2.44; echo floor($int); // returns -3

六. 尾记:

> o(* ̄▽ ̄*)ゞ 嘿嘿,小邪 9 号要到韩国去旅行,大概有 5 天左右,打算要去强力围观一下棒子们。

Leave a comment
61 Comments.
  1. MOPVHS Google Chrome Windows 坐沙发!#1

    沙发!

    @
  2. 阿邙 Google Chrome Windows 坐板凳!#2

    板凳?

    @
  3. 丕子 Mozilla Firefox Ubuntu Linux 躺地板!#3

    嗯 qiqi毕竟是写算法的 经常在jol做题 所以效率问题一看就看出来了

    @
  4. dudo Google Chrome Windows 天花板!#4

    不懂PHP的人纯围观之……

    @
  5. N Google Chrome Windows 下水道!#5

    越折腾,越健康 :arrow:

    @
  6. mice GreenBrowser Windows 地心!#6

    我勒个去..9号就走了...

    @
  7. 等我把所有订阅文章搞定再来仔细看看 :mrgreen:

    @
  8. 哇,真爽哈,见棒子去了~

    @
  9. N久没看见了,灌一水 :redface: :redface: :redface:

    @
  10. 其实我本来想说的,为啥不用我前段时间写的文章里面的 Human_time_diff wp内置函数呢?我以为小邪知道

    @
  11. Human_time_diff 这个要是加上几秒就好了

    @
  12. 我一直用的Human_time_diff

    @
  13. 这是什么东西?

    @
  14. 算法的复杂度问题……

    @
  15. 改进版强大。。要拿来用。 :wink: :mrgreen:

    @
  16. 真是看不懂啊 呜呜

    @
  17. 如果我添加了从年到秒这么多单位,相隔时间超过一年后,也会显示XX年XXyueXX周XX。。。XX秒这样吧。。
    如果我只想显示最多的最大的三个单位呢?比如有年的话只显示年月周。。? :wink:

    @
  18. 关于你说floor的问题,它返回一个小于传入值的整数。你举的例子中1、2、3、5、6都没什么疑问吧。。4之所以会取1,是因为数值太小溢出了。。

    @
  19. 实在是应该找时间找比较容易的特效来折腾下

    @
  20. 这个你都研究的这么透,厉害

    @
  21. 小邪每天都在研究时间。。。写个时间简史吧。。。

    @
  22. 前面的减法那时居然看不明白。。除法的大概明白了~~

    @
  23. 呼噜呼噜呼噜的闪过,看完就昏昏欲睡了。

    @
  24. 居然官方也出这函数了呀,hiahia~

    @
  25. :razz: 技术贴的干活。

    @
  26. 测试一下

    @
  27. 围观下, 我不属于技术流的人.

    @

Leave a Reply


[ Ctrl + Enter ]