简介
小编在写微册项目的时候,有一个主页动态,说白了就跟朋友圈差不多,但是到最后做出的效果并不是让我特别满意,因为每一个动态信息的日期显示都是”XXXX-XX-XX XX:XX:XX”,字幅太长,所以小编就想到了朋友圈的时间显示样式,如果当天发布的日期跟当前时间作比较,显示“两分钟前”,那就好看多了
函数介绍
小编在这里介绍几个需要用到的底层函数
- date
- strtotime函数
strtotime() 函数将任何英文文本的日期或时间描述解析为 Unix 时间戳
- substr(string,start,length) 函数
string : 必需。规定要返回其中一部分的字符串。
start : 必需。规定在字符串的何处开始。
length : 可选。规定要返回的字符串长度。默认是直到字符串的结尾。
计算时间差
1 2 3 4 5 6 7 8 9 10
| $startdate=date('Y-m-d H:i:s'); $enddate="2020-12-12 12:12:12"; $date=floor((strtotime($enddate)-strtotime($startdate))/86400); echo "相差天数:".$date."天<br><br>"; $hour=floor((strtotime($enddate)-strtotime($startdate))%86400/3600); echo "相差小时数:".$hour."小时<br><br>"; $minute=floor((strtotime($enddate)-strtotime($startdate))%86400/60); echo"相差分钟数:".$minute."分钟<br><br>"; $second=floor((strtotime($enddate)-strtotime($startdate))%86400%60); echo"相差秒数:".$second."秒";
|
使用strtotime转换而来的都是长整形的一个变量,两个长整形的变量就可以做减法啦。
做减法得到的值时秒数,这个秒数对86400(一天的秒数)取余,则得到相差数。如果对86400取模,还对3600秒、60秒取余,则得到相关的小时和分钟数。如果对86400取模,再对60取模,则得到相差的秒数。
这里的取小时数/分钟数,只能在24小时内/60分钟内,因为一天不能超过24个小时,一小时不能超过60分,如果我想取剩余26个小时就不能用这个方法做了
基于微信朋友圈实现时间显示样式
以下这张图片是更改的数据,时间显示如图所示

定义一个timer方法传入指定的数组,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| public function timer(array $array) { $today = date('Y-m-d H:i:s'); $D = date('d'); $H = date('H'); $M = date('i'); foreach ($array as $key => $value) { $d = substr($value['create_time'], 8, 2); $h = substr($value['create_time'], 11, 2); $m = substr($value['create_time'], 14, 2); $date = (strtotime($today) - strtotime($value['create_time'])) / 86400; switch ($date) { case $date < 1: if ($D != $d) { $hour = 24 - $h + $H; } else { $hour = abs($H - $h); } if ($hour < 1) { if ($m == $M) { $array[$key]['create_time'] = "刚刚"; break; } else if ($m < $M) { $minute = $M - $m; $array[$key]['create_time'] = $minute . "分钟前"; break; } else { $minute = 60 - $m + $M; $array[$key]['create_time'] = $minute . "分钟前"; break; } } else { $array[$key]['create_time'] = $hour . "小时前"; break; } break; case $date < 2: $array[$key]['create_time'] = "昨天"; break; case $date < 3: $array[$key]['create_time'] = "两天前"; break; default: $array[$key]['create_time'] = $array[$key]['create_time']; break; } } return $array; }
|
更改好后的时间显示格式如下,是不是就跟朋友圈的时间格式一样啦?
效果如下图‘create_time字段’所示
