How to get time difference in minutes in PHP

PhpDateTimeMinute

Php Problem Overview


How to calculate minute difference between two date-times in PHP?

Php Solutions


Solution 1 - Php

The answers above are for older versions of PHP. Use the DateTime class to do any date calculations now that PHP 5.3 is the norm. Eg.

$start_date = new DateTime('2007-09-01 04:10:58');
$since_start = $start_date->diff(new DateTime('2012-09-11 10:25:00'));
echo $since_start->days.' days total<br>';
echo $since_start->y.' years<br>';
echo $since_start->m.' months<br>';
echo $since_start->d.' days<br>';
echo $since_start->h.' hours<br>';
echo $since_start->i.' minutes<br>';
echo $since_start->s.' seconds<br>';

$since_start is a DateInterval object. Note that the days property is available (because we used the diff method of the DateTime class to generate the DateInterval object).

The above code will output:

1837 days total
5 years
0 months
10 days
6 hours
14 minutes
2 seconds

To get the total number of minutes:

$minutes = $since_start->days * 24 * 60;
$minutes += $since_start->h * 60;
$minutes += $since_start->i;
echo $minutes.' minutes';

This will output:

2645654 minutes

Which is the actual number of minutes that has passed between the two dates. The DateTime class will take daylight saving (depending on timezone) into account where the "old way" won't. Read the manual about Date and Time http://www.php.net/manual/en/book.datetime.php

Solution 2 - Php

Here is the answer:

$to_time = strtotime("2008-12-13 10:42:00");
$from_time = strtotime("2008-12-13 10:21:00");
echo round(abs($to_time - $from_time) / 60,2). " minute";

Solution 3 - Php

Subtract the past most one from the future most one and divide by 60.

Times are done in Unix format so they're just a big number showing the number of seconds from January 1, 1970, 00:00:00 GMT

Solution 4 - Php

<?php
$date1 = time();
sleep(2000);
$date2 = time();
$mins = ($date2 - $date1) / 60;
echo $mins;
?>

Solution 5 - Php

<?php
$start = strtotime('12:01:00');
$end = strtotime('13:16:00');
$mins = ($end - $start) / 60;
echo $mins;
?>

Output:

75

Solution 6 - Php

It worked on my programs, i'am using date_diff, you can check date_diff manual on here.

$start = date_create('2015-01-26 12:01:00');
$end = date_create('2015-01-26 13:15:00');
$diff=date_diff($end,$start);
print_r($diff);

You get results what do you want.

Solution 7 - Php

another way with timezone.

$start_date = new DateTime("2013-12-24 06:00:00",new DateTimeZone('Pacific/Nauru'));
$end_date = new DateTime("2013-12-24 06:45:00", new DateTimeZone('Pacific/Nauru'));
$interval = $start_date->diff($end_date);
$hours   = $interval->format('%h'); 
$minutes = $interval->format('%i');
echo  'Diff. in minutes is: '.($hours * 60 + $minutes);

Solution 8 - Php

I wrote this function for one my blog site(difference between a past date and server's date). It will give you an output like this

"49 seconds ago", "20 minutes ago", "21 hours ago" and so on

I have used a function that would get me the difference between the date passed and the server's date.

<?php

//Code written by purpledesign.in Jan 2014
function dateDiff($date)
{
    $mydate= date("Y-m-d H:i:s");
    $theDiff="";
    //echo $mydate;//2014-06-06 21:35:55
    $datetime1 = date_create($date);
    $datetime2 = date_create($mydate);
    $interval = date_diff($datetime1, $datetime2);
    //echo $interval->format('%s Seconds %i Minutes %h Hours %d days %m Months %y Year    Ago')."<br>";
    $min=$interval->format('%i');
    $sec=$interval->format('%s');
    $hour=$interval->format('%h');
    $mon=$interval->format('%m');
    $day=$interval->format('%d');
    $year=$interval->format('%y');
    if($interval->format('%i%h%d%m%y')=="00000") {
        //echo $interval->format('%i%h%d%m%y')."<br>";
        return $sec." Seconds";
    } else if($interval->format('%h%d%m%y')=="0000"){
        return $min." Minutes";
    } else if($interval->format('%d%m%y')=="000"){
        return $hour." Hours";
    } else if($interval->format('%m%y')=="00"){
        return $day." Days";
    } else if($interval->format('%y')=="0"){
        return $mon." Months";
    } else{
        return $year." Years";
    }    
}
?>

Save it as a file suppose "date.php". Call the function from another page like this

<?php
 require('date.php');
 $mydate='2014-11-14 21:35:55';
 echo "The Difference between the server's date and $mydate is:<br> ";
 echo dateDiff($mydate);
?>

Of course you can modify the function to pass two values.

Solution 9 - Php

I think this will help you

function calculate_time_span($date){
    $seconds  = strtotime(date('Y-m-d H:i:s')) - strtotime($date);

        $months = floor($seconds / (3600*24*30));
        $day = floor($seconds / (3600*24));
        $hours = floor($seconds / 3600);
        $mins = floor(($seconds - ($hours*3600)) / 60);
        $secs = floor($seconds % 60);

        if($seconds < 60)
            $time = $secs." seconds ago";
        else if($seconds < 60*60 )
            $time = $mins." min ago";
        else if($seconds < 24*60*60)
            $time = $hours." hours ago";
        else if($seconds < 24*60*60)
            $time = $day." day ago";
        else
            $time = $months." month ago";

        return $time;
}

Solution 10 - Php

DateTime::diff is cool, but awkward for this sort of calculations that require a single unit result. Manually subtracting the timestamps works better:

$date1 = new DateTime('2020-09-01 01:00:00');
$date2 = new DateTime('2021-09-01 14:00:00');
$diff_mins = abs($date1->getTimestamp() - $date2->getTimestamp()) / 60;

Solution 11 - Php

This is how I displayed "xx times ago" in php > 5.2 .. here is more info on DateTime object

//Usage:
$pubDate = $row['rssfeed']['pubDates']; // e.g. this could be like 'Sun, 10 Nov 2013 14:26:00 GMT'
$diff = ago($pubDate);    // output: 23 hrs ago

// Return the value of time different in "xx times ago" format
function ago($timestamp)
{

    $today = new DateTime(date('y-m-d h:i:s')); // [2]
    //$thatDay = new DateTime('Sun, 10 Nov 2013 14:26:00 GMT');
    $thatDay = new DateTime($timestamp);
    $dt = $today->diff($thatDay);

    if ($dt->y > 0){
        $number = $dt->y;
        $unit = "year";
    } else if ($dt->m > 0) {
        $number = $dt->m;
        $unit = "month";
    } else if ($dt->d > 0) {
        $number = $dt->d;
        $unit = "day";
    } else if ($dt->h > 0) {
        $number = $dt->h;
        $unit = "hour";
    } else if ($dt->i > 0) {
        $number = $dt->i;
        $unit = "minute";
    } else if ($dt->s > 0) {
        $number = $dt->s;
        $unit = "second";
    }
    
    $unit .= $number  > 1 ? "s" : "";
 
    $ret = $number." ".$unit." "."ago";
    return $ret;
}

Solution 12 - Php

function date_getFullTimeDifference( $start, $end )
{
$uts['start']      =    strtotime( $start );
        $uts['end']        =    strtotime( $end );
        if( $uts['start']!==-1 && $uts['end']!==-1 )
        {
            if( $uts['end'] >= $uts['start'] )
            {
                $diff    =    $uts['end'] - $uts['start'];
                if( $years=intval((floor($diff/31104000))) )
                    $diff = $diff % 31104000;
                if( $months=intval((floor($diff/2592000))) )
                    $diff = $diff % 2592000;
                if( $days=intval((floor($diff/86400))) )
                    $diff = $diff % 86400;
                if( $hours=intval((floor($diff/3600))) )
                    $diff = $diff % 3600;
                if( $minutes=intval((floor($diff/60))) )
                    $diff = $diff % 60;
                $diff    =    intval( $diff );
                return( array('years'=>$years,'months'=>$months,'days'=>$days, 'hours'=>$hours, 'minutes'=>$minutes, 'seconds'=>$diff) );
            }
            else
            {
                echo "Ending date/time is earlier than the start date/time";
            }
        }
        else
        {
            echo "Invalid date/time data detected";
        }
}

Solution 13 - Php

A more universal version that returns result in days, hours, minutes or seconds including fractions/decimals:

function DateDiffInterval($sDate1, $sDate2, $sUnit='H') {
//subtract $sDate2-$sDate1 and return the difference in $sUnit (Days,Hours,Minutes,Seconds)
	$nInterval = strtotime($sDate2) - strtotime($sDate1);
	if ($sUnit=='D') { // days
		$nInterval = $nInterval/60/60/24;
	} else if ($sUnit=='H') { // hours
		$nInterval = $nInterval/60/60;
	} else if ($sUnit=='M') { // minutes
		$nInterval = $nInterval/60;
	} else if ($sUnit=='S') { // seconds
	}
	return $nInterval;
} //DateDiffInterval

Solution 14 - Php

Subtract the times and divide by 60.

Here is an example which calculate elapsed time from 2019/02/01 10:23:45 in minutes:

$diff_time=(strtotime(date("Y/m/d H:i:s"))-strtotime("2019/02/01 10:23:45"))/60;

Solution 15 - Php

My solution to find the difference between two dates is here. With this function you can find differences like seconds, minutes, hours, days, years and months.

function alihan_diff_dates($date = null, $diff = "minutes") {
 $start_date = new DateTime($date);
 $since_start = $start_date->diff(new DateTime( date('Y-m-d H:i:s') )); // date now
 print_r($since_start);
 switch ($diff) {
	case 'seconds':
		return $since_start->s;
		break;
	case 'minutes':
		return $since_start->i;
		break;
	case 'hours':
		return $since_start->h;
		break;
	case 'days':
		return $since_start->d;
		break;		
	default:
		# code...
		break;
 }
}

You can develop this function. I tested and works for me. DateInterval object output is here:

/*
DateInterval Object ( [y] => 0 [m] => 0 [d] => 0 [h] => 0 [i] => 5 [s] => 13 [f] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => 0 [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 ) 
*/

Function Usage:

$date = the past date, $diff = type eg: "minutes", "days", "seconds"

$diff_mins = alihan_diff_dates("2019-03-24 13:24:19", "minutes");

Good Luck.

Solution 16 - Php

$date1=date_create("2020-03-15");
$date2=date_create("2020-12-12");
$diff=date_diff($date1,$date2);
echo $diff->format("%R%a days");

For detailed format specifiers, visit the link.

Solution 17 - Php

Another simple way to calculate the difference in minutes. Please note this is a sample for calculating within a 1-year range. for more details click here

$origin = new DateTime('2021-02-10 09:46:32');
$target = new DateTime('2021-02-11 09:46:32');
$interval = $origin->diff($target);
echo (($interval->format('%d')*24) + $interval->format('%h'))*60; //1440 (difference in minutes)

Solution 18 - Php

This will help....

function get_time($date,$nosuffix=''){
	$datetime = new DateTime($date);
	$interval = date_create('now')->diff( $datetime );
	if(empty($nosuffix))$suffix = ( $interval->invert ? ' ago' : '' );
	else $suffix='';
	//return $interval->y;
	if($interval->y >=1)		{$count = date(VDATE, strtotime($date)); $text = '';}
	elseif($interval->m >=1)	{$count = date('M d', strtotime($date)); $text = '';}
	elseif($interval->d >=1)	{$count = $interval->d; $text = 'day';} 
	elseif($interval->h >=1)	{$count = $interval->h; $text = 'hour';}
	elseif($interval->i >=1)	{$count = $interval->i; $text = 'minute';}
	elseif($interval->s ==0)	{$count = 'Just Now'; $text = '';}
	else 						{$count = $interval->s; $text = 'second';}
	if(empty($text)) return '<i class="fa fa-clock-o"></i> '.$count;
	return '<i class="fa fa-clock-o"></i> '.$count.(($count ==1)?(" $text"):(" ${text}s")).' '.$suffix;		
}

Solution 19 - Php

I found so many solution but I never got correct solution. But i have created some code to find minutes please check it.

<?php

  $time1 = "23:58";
  $time2 = "01:00";
  $time1 = explode(':',$time1);
  $time2 = explode(':',$time2);
  $hours1 = $time1[0];
  $hours2 = $time2[0];
  $mins1 = $time1[1];
  $mins2 = $time2[1];
  $hours = $hours2 - $hours1;
  $mins = 0;
  if($hours < 0)
  {
    $hours = 24 + $hours;
  }
  if($mins2 >= $mins1) {
        $mins = $mins2 - $mins1;
    }
    else {
      $mins = ($mins2 + 60) - $mins1;
      $hours--;
    }
    if($mins < 9)
    {
      $mins = str_pad($mins, 2, '0', STR_PAD_LEFT);
    }
    if($hours < 9)
    {
      $hours =str_pad($hours, 2, '0', STR_PAD_LEFT);
    }
echo $hours.':'.$mins;
?>

It gives output in hours and minutes for example 01 hour 02 minutes like 01:02

Solution 20 - Php

Here is a simple one-liner:

$start = new DateTime('yesterday');
$end = new DateTime('now');
$diffInMinutes = iterator_count(new \DatePeriod($start, new \DateInterval('PT1M'), $end));

Solution 21 - Php

try this

$now = \Carbon\Carbon::now()->toDateString(); // get current time 
             $a = strtotime("2012-09-21 12:12:22"); 
             $b = strtotime($now);
             $minutes = ceil(($a - $b) / 3600); it will get ceiling value 

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTom SmykowskiView Question on Stackoverflow
Solution 1 - PhpmikeView Answer on Stackoverflow
Solution 2 - Phpuser38526View Answer on Stackoverflow
Solution 3 - PhpOliView Answer on Stackoverflow
Solution 4 - PhpTomView Answer on Stackoverflow
Solution 5 - PhpRahilkhan PathanView Answer on Stackoverflow
Solution 6 - PhpyussanView Answer on Stackoverflow
Solution 7 - PhpMuhammadView Answer on Stackoverflow
Solution 8 - PhpRaj Nandan SharmaView Answer on Stackoverflow
Solution 9 - PhpYubraj PokharelView Answer on Stackoverflow
Solution 10 - PhpŞafak GezerView Answer on Stackoverflow
Solution 11 - PhphriziyaView Answer on Stackoverflow
Solution 12 - PhpVeerendraView Answer on Stackoverflow
Solution 13 - PhpbesimpleView Answer on Stackoverflow
Solution 14 - PhpMustafa BazghandiView Answer on Stackoverflow
Solution 15 - PhpAli HanView Answer on Stackoverflow
Solution 16 - PhpsnrView Answer on Stackoverflow
Solution 17 - PhpUdith ChandrarathnaView Answer on Stackoverflow
Solution 18 - PhpGYaNView Answer on Stackoverflow
Solution 19 - PhpSumit Kumar GuptaView Answer on Stackoverflow
Solution 20 - PhpnimrodView Answer on Stackoverflow
Solution 21 - PhpHamza QureshiView Answer on Stackoverflow