Calculating number of years between 2 dates in PHP

前端 未结 5 1574
你的背包
你的背包 2020-12-30 19:32

I need to get the number of years from 2 dates provided. Here\'s my code:

function daysDifference($endDate, $beginDate)
{
   $date_parts1=explode(\"-\", $beg         


        
5条回答
  •  佛祖请我去吃肉
    2020-12-30 19:52

    Guys heres a good code i used to use.....its not my idea ....i just got it some where from the net...

    It also have a variety of options hope this helps.........

        function datediff($interval, $datefrom, $dateto, $using_timestamps = false) {
        /*
        $interval can be:
        yyyy - Number of full years
        q - Number of full quarters
        m - Number of full months
        y - Difference between day numbers
            (eg 1st Jan 2004 is "1", the first day. 2nd Feb 2003 is "33". The datediff is "-32".)
        d - Number of full days
        w - Number of full weekdays
        ww - Number of full weeks
        h - Number of full hours
        n - Number of full minutes
        s - Number of full seconds (default)
        */
    
        if (!$using_timestamps) {
            $datefrom = strtotime($datefrom, 0);
            $dateto = strtotime($dateto, 0);
        }
        $difference = $dateto - $datefrom; // Difference in seconds
    
        switch($interval) {
    
        case 'yyyy': // Number of full years
    
            $years_difference = floor($difference / 31536000);
            if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom)+$years_difference) > $dateto) {
                $years_difference--;
            }
            if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto)-($years_difference+1)) > $datefrom) {
                $years_difference++;
            }
            $datediff = $years_difference;
            break;
    
        case "q": // Number of full quarters
    
            $quarters_difference = floor($difference / 8035200);
            while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($quarters_difference*3), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
                $months_difference++;
            }
            $quarters_difference--;
            $datediff = $quarters_difference;
            break;
    
        case "m": // Number of full months
    
            $months_difference = floor($difference / 2678400);
            while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
                $months_difference++;
            }
            $months_difference--;
            $datediff = $months_difference;
            break;
    
        case 'y': // Difference between day numbers
    
            $datediff = date("z", $dateto) - date("z", $datefrom);
            break;
    
        case "d": // Number of full days
    
            $datediff = floor($difference / 86400);
            break;
    
        case "w": // Number of full weekdays
    
            $days_difference = floor($difference / 86400);
            $weeks_difference = floor($days_difference / 7); // Complete weeks
            $first_day = date("w", $datefrom);
            $days_remainder = floor($days_difference % 7);
            $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
            if ($odd_days > 7) { // Sunday
                $days_remainder--;
            }
            if ($odd_days > 6) { // Saturday
                $days_remainder--;
            }
            $datediff = ($weeks_difference * 5) + $days_remainder;
            break;
    
        case "ww": // Number of full weeks
    
            $datediff = floor($difference / 604800);
            break;
    
        case "h": // Number of full hours
    
            $datediff = floor($difference / 3600);
            break;
    
        case "n": // Number of full minutes
    
            $datediff = floor($difference / 60);
            break;
    
        default: // Number of full seconds (default)
    
            $datediff = $difference;
            break;
        }    
    
        return $datediff;
    
    } 
    
    echo datediff('yyyy','2009-01-16','2011-03-16');
    

提交回复
热议问题