请问怎么把“多少小时前”精确到“多少小时多少分钟前”

2018-10-29 17:50:21 +08:00
 6680101

网站默认的时间格式,是“多少小时前”,觉得太单薄,想像 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'];
    }

}

4995 次点击
所在节点    PHP
27 条回复
weirdo
2018-10-29 18:00:32 +08:00
composer require nesbot/carbon

了解一下
yibin001
2018-10-29 18:05:33 +08:00
歪哥楼,只有我觉得这样显示 xx 天、xx 小时、xx 分钟以前一点都不友好吗???
maemolee
2018-10-29 18:58:10 +08:00
@yibin001 同意,我一直受不了这种时间表示法。尤其是翻短信的时候,太傻逼了。
loading
2018-10-29 18:59:36 +08:00
@yibin001
@maemolee
我也觉得很傻。

不能用作恶,不帮楼主了。233
0ZXYDDu796nVCFxq
2018-10-29 19:02:06 +08:00
求余几次
6680101
2018-10-29 19:12:01 +08:00
@weirdo
多谢。瞄了一下,内容好多。
6680101
2018-10-29 19:16:18 +08:00
@loading
净说大实话。让我咋办。

各位爷,源代码能直接改成那样的格式吗?
纯小白,PHP 没接触过啊,代码不是我写的。
6680101
2018-10-29 19:21:45 +08:00
@yibin001
@maemolee
从我的角度,如果改成具体的年月日时分秒格式,手机上太占空间了,排版不好看。我试过了。所以,想像 V2EX 这样显示。主要是话题讨论。对时间的准确性要求不高。
6680101
2018-10-29 19:23:39 +08:00
@gstqc
Thanks.
思路没错。
遗憾的是我不懂写法。
66beta
2018-10-29 20:04:38 +08:00
这个不难吧,如果你要维护,还是学一下基本的编程吧...
sobigfish
2018-10-29 20:10:21 +08:00
v2ex 这么显示不友好的地方是只显示 time ago 的相对时间
(不在其他方式下 显示绝对时间 比如移上去可以以 title 提示绝对时间)
有可以显示的绝对时间的方式的我觉得还好
6680101
2018-10-29 20:14:23 +08:00
@66beta
后面确实要学习一下 php。

大哥,你别走。
请问能通过直接修改上面的代码实现预期格式吗?
不能的话,我再按照一楼大哥的线索去学习。

我只是用别人的源码搭了一个网站玩玩。结果,或许以后竟然入了这一行。这也……
yhxx
2018-10-29 20:16:03 +08:00
@yibin001
+1
x 秒前,x 分钟前还可以接受一下
x 小时,x 天前简直不能忍
kran
2018-10-29 20:17:17 +08:00
省略年份的更可恶,这种优化真是徒增烦恼
doowzs
2018-10-29 20:20:51 +08:00
@weirdo
carbon+1
carbon ver2 超好用
marcong95
2018-10-29 22:28:00 +08:00
其实你就这样把 x 分钟前的那段 elseif 拼到 x 小时前的那段不就好了么

就是这个 i18n 的问题需要调整一下

而且由于这段代码有 i18n 的相关代码,也不知道你只改这里会不会不太好
6680101
2018-10-29 22:50:37 +08:00
@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'];
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 是把两个字符串拼起来
marcong95
2018-10-30 00:20:57 +08:00
@6680101 当然这写法不好,有极大可能被各种鄙视。。。只是个应急写法
feverzsj
2018-10-30 00:22:17 +08:00
看来 lz 以前是搞人工智能的,这么多 if

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/502268

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX