PHP - 时间操作各种实战实例,总有你想要的

简单粗暴 ⛽️

获取当天的开始时间与结束时间

// 当天开始时间
$start_time = strtotime(date("Y-m-d", time())); // 1620662400

// 当天结束时间
$end_time = $start_time + 60 * 60 * 24 - 1; // 1620748799

var_dump(
    date("Y-m-d H:i:s", $start_time), // 2021-05-11 00:00:00
    date("Y-m-d H:i:s",$end_time) // 2021-05-11 23:59:59
);



获取指定时间的之前或之后的时间戳

$time = time();

// 前两天
strtotime("-2 day", $time);

// 前两个礼拜
strtotime("-2 week", $time);

// 前两个月
strtotime("-2 month", $time);

// 前两年
strtotime("-2 year", $time);

// strtotime() 第二个参数 $time 如果不传,默认以当前时间计算
// 可以将 '-2 day' 变为 '+2 day' ,就变成获取后两天的时间了



获取倒计时描述

    /**
     * 获取倒计时描述
     * @link 原文作者请留言
     * @param [Integer] $start_time 开始时间时间戳
     * @param [Integer] $end_time   结束时间时间戳
     * @return [string] $mag        倒计时展示
     */
    function getCountDown($start_time, $end_time) {
        $mag = "";

        if ($start_time > time()) {

            $ga = date("w");

            switch ($ga) {
                case 1 : $zh = date("Y-m-d", strtotime("+6 day"));
                    break;
                case 2 : $zh = date("Y-m-d", strtotime("+5 day"));
                    break;
                case 3 : $zh = date("Y-m-d", strtotime("+4 day"));
                    break;
                case 4 : $zh = date("Y-m-d", strtotime("+3 day"));
                    break;
                case 5 : $zh = date("Y-m-d", strtotime("+2 day"));
                    break;
                case 6 : $zh = date("Y-m-d", strtotime("+1 day"));
                    break;
                case 7 : $zh = date("Y-m-d");
                    break;
            }

            $xz = strtotime($zh) + 3600 * 24 * 7;

            $weekarray = array("日", "一", "二", "三", "四", "五", "六", "日");

            if (date('Y-m-d', $start_time) == date("Y-m-d")) {

                $mag = '今天 ' . date('H:i', $start_time) . ' 开始';
            } else if (date("Y-m-d", strtotime("+1 day")) == date("Y-m-d", $start_time)) {

                $mag = '明天 ' . date('H:i', $start_time) . ' 开始';
            } else if (date("Y-m-d", strtotime("+1 day")) == date("Y-m-d", $start_time)) {

                $mag = '明天 ' . date('H:i', $start_time) . ' 开始';
            } else if (date("Y-m-d", strtotime("+2 day")) == date("Y-m-d", $start_time)) {

                $mag = '后天 ' . date('H:i', $start_time) . ' 开始';
            } else if ($w < 5 && strtotime($zh) >= strtotime(date("Y-m-d", $start_time))) {

                $mag = '本周' . $weekarray[date('w', $start_time)] . ' ' . date('H:i', $start_time) . ' 开始';
            } else if ($xz >= strtotime(date("Y-m-d", $start_time))) {

                $mag = '下周' . $weekarray[date('w', $start_time)] . ' ' . date('H:i', $start_time) . ' 开始';
            } else {

                $mag = date('m-d H:i', $start_time) . ' 开始';
            }
        } else {
            if($end_time- time()<=0){
                
                $mag =  ' 已经结束';
            
            }else if ($end_time - time() <= 3600 * 24 * 10) {
                
                $mag = $this->time_ago($end_time) . ' 后结束';
            } else {

                $mag = date('m-d H:i', $end_time) . ' 结束';
            }
        }
        
        return $mag;
    }



计算两个日期的数字差(年月日时分秒)

    /**
     * 计算两个日期的数字差(年月日时分秒)
     * @param  [string] $date1 [格式: 2020-05-20]
     * @param  [string] $date2 [格式: 2020-08-21]
     * @return [array]         [格式: array('y'=>'00','m'=>'3','d'=>'1','h'=>00','i'=>0','s'=>'0','a'=>'93')]
     */
    function diffDate($date1,$date2)
    {
        $datetime1 = new \DateTime($date1);
        $datetime2 = new \DateTime($date2);
        $interval = $datetime1->diff($datetime2);
        $time['y'] = $interval->format('%Y'); // 年
        $time['m'] = $interval->format('%m'); // 月
        $time['d'] = $interval->format('%d'); // 日
        $time['h'] = $interval->format('%H'); // 小时
        $time['i'] = $interval->format('%i'); // 分钟
        $time['s'] = $interval->format('%s'); // 秒
        $time['a'] = $interval->format('%a'); // 两个时间相差总天数
        return $time;
    }



时间计算, 几年前、几个月前 (年,月,日,时,分,秒)

/** 
 * 时间计算, 几年前、几个月前 (年,月,日,时,分,秒) 
 * @link(Young-杨, https://blog.csdn.net/vailook/article/details/54133449)
 * @param [Integer]   $time  对比时间 
 * @param [String]    
 */
function format_date($time){
    $t=time()-$time;
    $f=array(
        '31536000'=>'年',
        '2592000'=>'个月',
        '604800'=>'星期',
        '86400'=>'天',
        '3600'=>'小时',
        '60'=>'分钟',
        '1'=>'秒'
    );
    foreach ($f as $k=>$v)    {
        if (0 !=$c=floor($t/(int)$k)) {
            return $c.$v.'前';
        }
    }
}



PHP 两个日期(时间段) 之间的日期数组

/** 
 * PHP 两个日期(时间段) 之间的日期数组
 * @link(路过火车, https://blog.csdn.net/weixin_42362496/article/details/85204596)
 * @param [string]   $start_time  对比时间 2020-10-10
 * @param [string]   $end_time    结束时间 2020-10-20
 * @param [array]    
 */
function periodDate($start_time,$end_time){
    $start_time = strtotime($start_time);
    $end_time = strtotime($end_time);
    $i=0;
    while ($start_time<=$end_time){
        $arr[$i]=date('Y-m-d',$start_time);
        $start_time = strtotime('+1 day',$start_time);
        $i++;
    }

    return $arr;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端木木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值