计算格式为YYYY-MM-DD HH:ii:ss的两个时间,相差多少年、多少月、多少日、多少小时、多少分钟、多少秒?

本文介绍了一个PHP函数,用于精确计算两个指定日期时间之间的年、月、日、小时、分钟和秒的差异,并通过正则表达式验证了输入格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
    function diffDateTime($datetime1,$datetime2){
        $preg = "/^\d{4}\-\d{2}\-\d{2}(\s)+\d{2}:\d{2}:\d{2}$/";//验证时间格式是否为YYYY-MM-DD HH:ii:ss
        if(!preg_match($preg, $datetime1) || !preg_match($preg, $datetime2)) exit('Format Error');
        if(strtotime($datetime1) > strtotime($datetime2)){  
            $tmp = $datetime2;  
            $datetime2 = $datetime1;  
            $datetime1 = $tmp;  
        }
        list($date1,$time1) = explode(' ',$datetime1);  
        list($date2,$time2) = explode(' ',$datetime2);
        list($year1,$month1,$day1) = explode('-',$date1);
        list($year2,$month2,$day2) = explode('-',$date2);
        if(!checkdate($month1,$day1,$year1) || !checkdate($month2,$day2,$year2)) exit('Invalid Date');
        $diff_year = $year2 - $year1;
        $diff_month = $month2 - $month1;  
        $diff_day = $day2 - $day1;
        if($diff_day < 0){  
            $diff_day += (int)date('t',strtotime("-1 month $date2"));  
            $diff_month--;  
        }  
        if($diff_month < 0){  
            $diff_month += 12;  
            $diff_year--;  
        }  
        //计算时间差
        $timediff = abs(strtotime($time2) - strtotime($time1));
        //计算小时数
        $diff_hour = intval($timediff / 3600);
        //计算分钟数
        $remain = $timediff % 3600;
        $diff_minute = intval($remain / 60);
        //计算秒数
        $diff_second = $remain % 60;
        return array(
            'diff_year' => $diff_year,
            'diff_month' => $diff_month,
            'diff_day' => $diff_day,
            'diff_hour' => $diff_hour,
            'diff_minute' => $diff_minute,
            'diff_second' => $diff_second
        );  
    }

    var_dump(diffDateTime('2019-02-27 12:20:15','2017-02-02 12:19:55'));


输出:

array (size=6)
  'diff_year' => int 2
  'diff_month' => int 0
  'diff_day' => int 25
  'diff_hour' => int 0
  'diff_minute' => int 0
  'diff_second' => int 20


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值