Search code examples
phpdatedatetimedatediff

How to include last day when using date_diff?


From Apr 13 to May 12, including the last day, the day difference would be 30 days.

But if I use date_diff, I get only 29 days. How do I include the last day? Do I simply add one more day or is there a more elegant solution?


Solution

  • yes you need to include at the last day like you provided link of 30 day because in php date_diff no issue , please again check your reference link there is also option like include end date in calculation (1 day is added)

    PHP date_diff not include last day in calculation default so you need to specify it manual

    enter image description here

    php date_diff no issue because I have added belo four sample to also calculate date different

    note: in below example also need to add one more day if need

    #1 example 
    
    $date1 = date_create('2022-04-13');
    $date2 = date_create('2022-05-12');
    
    $dateDifference = date_diff($date1, $date2)->format('%y years, %m months and %d days');
    
    echo $dateDifference;
    
    #2 example 
    
    $date1 = date_create('2022-04-13');
    $date2 = date_create('2022-05-12');
    $diff=date_diff($date1,$date2);
    $months = $diff->format("%m months");
    $years = $diff->format("%y years");
    $days = $diff->format("%d days");
    
    echo $years .' '.$months.' '.$days;
    
    #3 example 
    
    $date1 = date_create('2022-04-13');
    $date2 = date_create('2022-05-12');
    $diff1 = date_diff($date1,$date2);
    print_r($diff1);
    
    
    #4 example 
    $date1 = '2022-04-13';
    $date2 = '2022-05-12';
    
    $diff = abs(strtotime($date2) - strtotime($date1));
    
    $years = floor($diff / (365*60*60*24));
    $months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
    $days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
    
    printf("%d years, %d months, %d days\n", $years, $months, $days);