So erhalten Sie Zeitunterschied in Minuten in PHP


Antworten:


92

Subtrahieren Sie die Vergangenheit am meisten von der Zukunft am meisten und dividieren Sie durch 60.

Die Zeiten werden im Unix-Format angegeben, sodass es sich nur um eine große Zahl handelt, die die Anzahl der Sekunden ab angibt January 1, 1970, 00:00:00 GMT


1
@Jerald Wie funktioniert diese Lösung für Sie? Haben Sie etwas dagegen, es zumindest ein wenig zu erläutern? Vielen Dank.
Wafie Ali

7
@WafieAli $ nInterval = strtotime ($ sDate2) - strtotime ($ sDate1); Dies gibt den Zeitunterschied in Sekunden zurück, dann können Sie einfach durch 60 teilen. $ nInterval = $ nInterval / 60;
Jerald

+1, um zu erklären, was zu tun ist, und um nicht die nutzlose DateInterval-Klasse zu verwenden, für die es keine Methode gibt: Differenz in Minuten zurückgeben .
AndreKR

404

Die obigen Antworten gelten für ältere Versionen von PHP. Verwenden Sie die DateTime-Klasse, um Datumsberechnungen durchzuführen, da PHP 5.3 die Norm ist. Z.B.

$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 ist ein DateInterval- Objekt. Beachten Sie, dass die Eigenschaft days verfügbar ist (da wir die diff-Methode der DateTime-Klasse zum Generieren des DateInterval-Objekts verwendet haben).

Der obige Code wird ausgegeben:

1837 Tage insgesamt
5 Jahre
0 Monate
10 Tage
6 Stunden
14 Minuten
2 Sekunden

So erhalten Sie die Gesamtzahl der Minuten:

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

Dies wird Folgendes ausgeben:

2645654 Minuten

Welches ist die tatsächliche Anzahl von Minuten, die zwischen den beiden Daten vergangen sind. Die DateTime-Klasse berücksichtigt die Sommerzeit (abhängig von der Zeitzone), wo dies auf "alte Weise" nicht der Fall ist. Lesen Sie das Handbuch zu Datum und Uhrzeit http://www.php.net/manual/en/book.datetime.php


12
Pitty DateInterval hat keine Methode wie inSeconds()oder ähnliches, jetzt ist es Code-Wiederholung überall dort, wo ich die Differenz in Sekunden berechnen muss.
Marius Balčytis

5
@barius Oder Sie können eine Funktion schreiben, die den sich wiederholenden Code umschließt, oder sogar DateTime erweitern und Ihren Code nicht wiederholen.
Anther

17
+1 für die einzig richtige Antwort zum Zeitpunkt des Schreibens dieses Kommentars.
NB

8
Die Verwendung der neuen DateTime-Klasse ist gut, aber warum sollte ein DateInterval generiert werden, das dann so umständlich dekodiert werden muss? $dateFrom = new DateTime('2007-09-01 04:10:58'); $dateTo = new DateTime('2012-09-11 10:25:00'); echo ($dateTo->getTimestamp()-$dateFrom->getTimestamp())/60 ;
Dkloke

2
Kann mir jemand erklären, warum dies besser ist als die strtotimeAntwort darüber? Dies scheint ein Fall von OOP zu sein, wenn das Verfahren MINDESTENS als gültige (und wesentlich präzisere) Lösung gilt.
Bing

341

Hier ist die Antwort:

$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";

4
abs () -Funktion nicht erforderlich, wenn jemand auch die negative Zeit überprüfen möchte!
Pran

34
Für diejenigen, die sich fragen, / 60,2bedeutet das: durch sechzig teilen, auf die nächsten zwei Dezimalstellen runden.
Bing

3
strtotime ist unzuverlässig, vermeiden. Funktioniert nur für bestimmte Datumsformate, hauptsächlich in den USA.
Sivann

14
strtotimemag veraltet sein, aber es ist nicht unzuverlässig, wenn Sie es richtig verwenden. Es liegt auf der Hand, dass Sie mit konsistenten Datumsformaten arbeiten müssen, um die Daten korrekt lesen (oder analysieren) zu können. Sehen Sie ISO 8601und beschuldigen Sie nicht die Werkzeuge: =)
Phil

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

1
Dies ist sehr ordentlich und selbsterklärend im Gegensatz zu dem oben genannten Gunk.
TheRealChx101

Können Sie erklären, warum Sie einige benötigen sleep, um eine Datumsdifferenz zu berechnen?
Nico Haase

2
Gibt es einen besseren Weg, um Ihre Zeit zu nutzen, während Sie auf eine andere Zeit warten, als einen kurzen Schlaf zu haben? obwohl dies theoretisch eine Antwort von 2 geben sollte, was Menschen helfen könnte, die versuchen, die Formel zu verstehen und zu bestätigen, dass sie korrekt ist.
Slappy-X

15

Es hat bei meinen Programmen funktioniert, ich benutze date_diff, Sie können das date_diffHandbuch hier überprüfen .

$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);

Sie erhalten Ergebnisse, was Sie wollen.


1
Seltsam für mich ist die Ausführung dieses Codes nicht der Zeitunterschied in Minuten
Nico Haase

Dies ist nur nützlich, wenn Sie "1 Stunde 14 Minuten" ausgeben möchten. Wenn Sie zum Beispiel nur Minuten wollen, müssen Sie rechnen: ($ diff-> h * 60) + $ diff-> i)
BIP

13

ein anderer Weg mit Zeitzone.

$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);

4
Wenn Sie auch Tage wollen, dann fügen Sie hinzu $days = $interval->format('%d');und der Unterschied ist ($days * 1440 + $hours * 60 + $minutes). Seit Monaten, Jahren => gleiche Logik
Seher

12

Ich habe diese Funktion für eine meiner Blog-Sites geschrieben (Unterschied zwischen einem vergangenen Datum und dem Datum des Servers). Sie erhalten eine solche Ausgabe

"Vor 49 Sekunden", "vor 20 Minuten", "vor 21 Stunden" und so weiter

Ich habe eine Funktion verwendet, mit der ich die Differenz zwischen dem übergebenen Datum und dem Datum des Servers ermitteln kann.

<?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";
   }

}
?>

Speichern Sie es als Datei, nehmen Sie "date.php" an. Rufen Sie die Funktion von einer anderen Seite wie dieser auf

<?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);
?>

Natürlich können Sie die Funktion so ändern, dass zwei Werte übergeben werden.


10

Ich denke, das wird dir helfen

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;
}

Bitte fügen Sie Ihrem Code eine Erklärung hinzu, damit das OP daraus lernen kann
Nico Haase

Für Minuten$minutes = floor(($seconds/60)%60);
Aravindh Gopi

8
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";
        }
}

8

Eine universellere Version, die Ergebnisse in Tagen, Stunden, Minuten oder Sekunden einschließlich Brüchen / Dezimalstellen zurückgibt:

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

Bitte fügen Sie Ihrem Code eine Erklärung hinzu, damit das OP daraus lernen kann
Nico Haase

7

So habe ich "vor xx mal" in PHP> 5.2 angezeigt. Hier finden Sie weitere Informationen zum DateTime- Objekt

//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;
}

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

Ausgabe:

75

3

Subtrahieren Sie die Zeiten und dividieren Sie durch 60.

Hier ist ein Beispiel, das die verstrichene Zeit 2019/02/01 10:23:45in Minuten berechnet :

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

2

Meine Lösung, um den Unterschied zwischen zwei Daten zu finden, ist hier. Mit dieser Funktion können Sie Unterschiede wie Sekunden, Minuten, Stunden, Tage, Jahre und Monate feststellen.

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;
 }
}

Sie können diese Funktion entwickeln. Ich habe getestet und arbeite für mich. Die Ausgabe des DateInterval-Objekts erfolgt hier:

/*
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 ) 
*/

Funktionsnutzung:

$ date = das vergangene Datum, $ diff = Typ zB: "Minuten", "Tage", "Sekunden"

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

Viel Glück.


0

Das wird helfen....

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;     
}

1
Bitte fügen Sie Ihrem Code eine Erklärung hinzu, damit das OP daraus lernen kann
Nico Haase

0

Ich habe so viele Lösungen gefunden, aber nie die richtige Lösung gefunden. Aber ich habe einen Code erstellt, um Minuten zu finden. Bitte überprüfen Sie ihn.

<?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;
?>

Es gibt eine Ausgabe in Stunden und Minuten, zum Beispiel 01 Stunde 02 Minuten wie 01:02

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.