网站默认的时间格式,是“多少小时前”,觉得太单薄,想像 V2EX 这样,显示“多少小时多少分钟前”, 小白一个,请大神指教,多谢!
原代码如下:
function humandate($timestamp, $lan = array()) { $time = $_SERVER['time']; $lang = $_SERVER['lang'];
static $custom_humandate = NULL;
if($custom_humandate === NULL) $custom_humandate = function_exists('custom_humandate');
if($custom_humandate) return custom_humandate($timestamp, $lan);
$seconds = $time - $timestamp;
$lan = empty($lang) ? $lan : $lang;
empty($lan) AND $lan = array(
'month_ago'=>'月前',
'day_ago'=>'天前',
'hour_ago'=>'小时前',
'minute_ago'=>'分钟前',
'second_ago'=>'秒前',
);
if($seconds > 31536000) {
return date('Y-n-j', $timestamp);
} elseif($seconds > 2592000) {
return floor($seconds / 2592000).$lan['month_ago'];
} elseif($seconds > 86400) {
return floor($seconds / 86400).$lan['day_ago'];
} elseif($seconds > 3600) {
return floor($seconds / 3600).$lan['hour_ago'];
} elseif($seconds > 60) {
return floor($seconds / 60).$lan['minute_ago'];
} else {
return $seconds.$lan['second_ago'];
}
}
1
weirdo 2018-10-29 18:00:32 +08:00
composer require nesbot/carbon
了解一下 |
2
yibin001 2018-10-29 18:05:33 +08:00 4
歪哥楼,只有我觉得这样显示 xx 天、xx 小时、xx 分钟以前一点都不友好吗???
|
5
0ZXYDDu796nVCFxq 2018-10-29 19:02:06 +08:00 via Android
求余几次
|
7
6680101 OP |
8
6680101 OP |
10
66beta 2018-10-29 20:04:38 +08:00 via Android
这个不难吧,如果你要维护,还是学一下基本的编程吧...
|
11
sobigfish 2018-10-29 20:10:21 +08:00
v2ex 这么显示不友好的地方是只显示 time ago 的相对时间
(不在其他方式下 显示绝对时间 比如移上去可以以 title 提示绝对时间) 有可以显示的绝对时间的方式的我觉得还好 |
12
6680101 OP @66beta
后面确实要学习一下 php。 大哥,你别走。 请问能通过直接修改上面的代码实现预期格式吗? 不能的话,我再按照一楼大哥的线索去学习。 我只是用别人的源码搭了一个网站玩玩。结果,或许以后竟然入了这一行。这也…… |
14
kran 2018-10-29 20:17:17 +08:00 via iPhone
省略年份的更可恶,这种优化真是徒增烦恼
|
16
marcong95 2018-10-29 22:28:00 +08:00 via Android
其实你就这样把 x 分钟前的那段 elseif 拼到 x 小时前的那段不就好了么
就是这个 i18n 的问题需要调整一下 而且由于这段代码有 i18n 的相关代码,也不知道你只改这里会不会不太好 |
17
6680101 OP @marcong95
多谢。请问是这样拼吗?汗.. 感觉应该没写对。 } elseif($seconds > 3600) { return floor($seconds / 3600).$lan['hour'] floor($seconds-$seconds/3600*60).$lan['minute_ago']; } elseif($seconds > 60) { return floor($seconds / 60).$lan['minute_ago']; |
18
marcong95 2018-10-30 00:19:55 +08:00
@6680101 你似乎是完全没编程基础?感觉还是要先学一下,如果是公司项目急着要的话,比较简单的方法是
} elseif($seconds > 3600) { return floor($seconds / 3600).'分钟'.floor($seconds-$seconds/3600*60).$lan['minute_ago']; } elseif($seconds > 60) { return floor($seconds / 60).$lan['minute_ago']; 这个$lan 是一个关联数组,从你贴出来的代码看,里面并没有一个 hour 的项,所以$lan['hour']是取不出东西来的(而且还有可能报错,PHP 太久没碰了,我也不肯定) .(点)在 php 是把两个字符串拼起来 |
20
feverzsj 2018-10-30 00:22:17 +08:00
看来 lz 以前是搞人工智能的,这么多 if
|
21
tankeco 2018-10-30 00:31:28 +08:00
咦,时间那么复杂,难道不是<script src="moment.js" />么....?
|
22
6680101 OP |
24
kba977 2018-10-30 09:10:28 +08:00 via iPhone
这种活不应该直接交给 moment 么,一行代码的事
|
25
weirdo 2018-10-30 09:49:55 +08:00
@6680101 直接 carbon 啊,用时间戳或者格式化的时间 new 一个 carbon 对象,然后调 diffForHumans 方法,直接就出来了
|
26
realkaiway 2018-10-30 10:23:19 +08:00
时间处理为什么不考虑下 Moment.js...
|
27
6680101 OP |