php处理日期格式转化为‘刚刚’、‘N分钟前’、‘N小时前’

需求:前端展示日期是要显示为0-59分钟内转为'n分钟前';1小时<时间<24小时转为'12:33'(时和分);24小时<时间<48小时转为'昨天12:33';时间>48小时转为'10-27 15:41'的格式;

思路:
1.通过时间戳进行计算
2.‘刚刚’、‘N分钟前’、‘N小时前’都可以直接通过对比大小进行计算
3.从‘昨天’开始就要计算昨天的时间范围,昨天的0时到23时,在此范围内的为昨天,小于改范围的为更早的时间

注:网上有些在计算昨天的时候直接计算小于48小时并小于24小时的算法是个bug,前天大部分时间会被算为昨天

/**
     * 名称:日期转指定格式
     * @param $date datetime ‘2021-06-15 10:40:00’  需要转化的日期
     * 备注:0-59分钟内转为'n分钟前';1小时<时间<24小时转为'12:33'(时和分);24小时<时间<48小时转为'昨天12:33';时间>48小时转为'10-27 15:41';
     * 创建人:白色格子衫
     * 时间:2020/10/27 15:38
     */
    public function timeCycle($date){

        $time = strtotime($date);//转为时间戳

        $new_time = time();//当前时间戳

        $value = $new_time - $time;//已经过去了多少时间

        switch ($value){

            case ($value<60)://1分钟内转为'刚刚'
                $row = '刚刚';
                break;

            case (60<=$value && $value<3600)://0-59分钟内转为'n分钟前'
                $row = intval($value/60);
                $row = $row.'分钟前';
                break;

            case (3600<=$value && $value<(24*3600) && $time>strtotime(date('Y-m-d 00:00:00')))://1小时<时间<24小时转为'12:33'(时和分)
                $row = date('H:i',$time);
                break;
            //昨天0时开始到23时范围内的转为'昨天12:33'
            case ($time >= strtotime(date('Y-m-d 00:00:00',strtotime("-1 day"))) && $time <= strtotime(date('Y-m-d 23:59:59',strtotime("-1 day")))):
                $row = date('H:i',$time);
                $row = '昨天'.$row;
                break;

            case ($time <= strtotime(date('Y-m-d 00:00:00',strtotime("-1 day"))))://时间小于昨天0时的转为日期格式'10-27 15:41'
                $row = date('m-d H:i',$time);
                break;

            default:
                $row = date('m-d H:i',$time);
                break;
        }

        return $row;
    }

你可能感兴趣的:(php处理日期格式转化为‘刚刚’、‘N分钟前’、‘N小时前’)