网站默认的时间格式,是“多少小时前”,觉得太单薄,想像 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 ![]() 歪哥楼,只有我觉得这样显示 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 run2 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 |