基于微信朋友圈实现时间显示样式

Posted 2019-10-03updated 2019-12-17Words 915Reading time 6m

简介

小编在写微册项目的时候,有一个主页动态,说白了就跟朋友圈差不多,但是到最后做出的效果并不是让我特别满意,因为每一个动态信息的日期显示都是”XXXX-XX-XX XX:XX:XX”,字幅太长,所以小编就想到了朋友圈的时间显示样式,如果当天发布的日期跟当前时间作比较,显示“两分钟前”,那就好看多了

函数介绍

小编在这里介绍几个需要用到的底层函数

  1. date

    返回当前时间的时间戳,格式可以自行设置。

  2. strtotime函数

    strtotime() 函数将任何英文文本的日期或时间描述解析为 Unix 时间戳

  3. 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个小时就不能用这个方法做了

基于微信朋友圈实现时间显示样式

以下这张图片是更改的数据,时间显示如图所示
微信图片_20191007133542.png
定义一个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) {
// date<1 表示时间差在24小时内
case $date < 1:
if ($D != $d) { //判断当前日期是否相同,不相同则(24-发布日期+当前时间)
$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字段’所示
微信图片_20191007133734.png