PHP dakika cinsinden zaman farkı nasıl elde edilir


Yanıtlar:


92

Geçmişi çoğunu gelecekten en büyüğünden çıkarın ve 60'a bölün.

Zamanlar Unix biçiminde yapılır, böylece saniye cinsinden saniye sayısını gösteren büyük bir sayıdır. January 1, 1970, 00:00:00 GMT


1
@Jerald Bu çözüm sizin için nasıl çalışır? En azından biraz bilgilendirmeyi düşünür müsün? Teşekkürler.
Wafie Ali

7
@WafieAli $ nInterval = strtotime ($ sDate2) - strtotime ($ sDate1); bu zaman farkını saniye cinsinden döndürür, o zaman böyle 60'a bölebilirsiniz. $ nInterval = $ nInterval / 60;
Jerald

Ne yapılması gerektiğini açıklamak ve sadece bunu yapmak için bir yöntemi olmayan işe yaramaz DateInterval sınıfını kullanmamak için +1: dakika cinsinden fark .
AndreKR

404

Yukarıdaki yanıtlar PHP'nin eski sürümleri içindir. PHP 5.3 norm olduğu için herhangi bir tarih hesaplaması yapmak için DateTime sınıfını kullanın. Örneğin.

$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 bir DateInterval nesnesidir. Days özelliğinin kullanılabilir olduğunu unutmayın (çünkü DateInterval nesnesini oluşturmak için DateTime sınıfının diff yöntemini kullandık).

Yukarıdaki kod çıkacaktır:

1837 gün toplam
5 yıl
0 ay
10 gün
6 saat
14 dakika
2 saniye

Toplam dakika sayısını elde etmek için:

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

Bu çıktı:

2645654 dakika

Bu, iki tarih arasında geçen gerçek dakika sayısıdır. DateTime sınıfı, "eski yol" un bulunmayacağı yerlerde yaz saatini (saat dilimine bağlı olarak) dikkate alır. Tarih ve Saat hakkındaki kılavuzu okuyun http://www.php.net/manual/en/book.datetime.php


12
Pitty DateInterval yöntemi gibi inSeconds()veya benzer bir şey yok, şimdi saniyeler içinde farkı hesaplamak için gereken her yerde kod tekrarı var.
Marius Balčytis

5
@barius Ya da yinelenen kodu saran bir işlev yazabilir, hatta DateTime'ı genişletip kodunuzu yinelemeyen bir işlev yazabilirsiniz.
Anther

17
Bu yorumu yazarken doğru olan tek cevap için +1.
NB

8
Yeni DateTime sınıfını kullanmak iyidir, ancak neden bir kodun çözülmesi gereken bir DateInterval oluşturmalısınız? $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
Birisi bana bunun neden strtotimecevabından daha iyi olduğunu açıklayabilir mi? Prosedür geçerli (ve çok daha özlü) bir çözüm olarak EN AZ olduğunda bu bir OOP vakası gibi görünmektedir.
Bing

341

İşte cevap:

$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
Birisi de negatif zamanı kontrol etmek istiyorsa abs () işlevi gerekli değildir!
Pran

34
Merak edenler için / 60,2araçlar: altmışa bölün, en yakın iki ondalık basamağa yuvarlayın.
Bing

3
strtotime güvenilmez, kaçının. Yalnızca ABD ile ilgili belirli tarih biçimleri için çalışır.
sivann

14
strtotimeeski olabilir, ancak düzgün bir şekilde kullanırsanız güvenilir değildir. Tarihleri ​​doğru bir şekilde okuyabilmek (veya ayrıştırabilmek) için tutarlı tarih biçimleriyle çalışmanız gerektiği anlamına gelir. ISO 8601Araçları görün ve suçlamayın: =)
Phil

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

1
Bu, yukarıdaki gunktan farklı olarak çok düzgün ve açıklayıcı.
TheRealChx101

sleepTarih farkını hesaplamak için neden bazılarına ihtiyacınız olduğunu açıklayabilir misiniz ?
Nico Haase

2
Hızlı bir uykuya kıyasla karşılaştırmak için başka bir zaman beklerken zamanınızı kullanmanın daha iyi bir yolu. Her ne kadar bu teoride size formülü anlamaya çalışan insanların doğru olduğunu teyit eden 2'nin bir cevabını vermelidir.
slappy-x

15

Programlarımda çalıştı, kullanıyorum date_diff, buradakidate_diff kılavuzu kontrol edebilirsiniz .

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

Ne istiyorsan sonuç alırsın.


1
Garip, benim için, bu kodun yürütülmesi dakikalar arasında zaman farkı sağlamaz
Nico Haase

Bu yalnızca "1saat 14dakika" çıktı almak istiyorsanız kullanışlıdır. Örneğin, sadece dakikalar istiyorsanız), şu matematiği yapmanız gerekir: ($ diff-> h * 60) + $ diff-> i)
GSYİH

13

saat dilimi ile başka bir yol.

$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
Eğer gün istiyorsanız, eklediğinizden $days = $interval->format('%d');ve farktan daha fazladır ($days * 1440 + $hours * 60 + $minutes). Aylar, yıllar => aynı mantık
Seer

12

Bu işlevi bir blog sitem için yazdım (geçmiş tarih ile sunucunun tarihi arasındaki fark). Size böyle bir çıktı verecektir

"49 saniye önce", "20 dakika önce", "21 saat önce" vb.

Bana geçen tarih ile sunucunun tarihi arasındaki farkı elde edecek bir işlev kullandım.

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

}
?>

Bir dosya olarak kaydedin "date.php" varsayalım. İşlevi böyle bir sayfadan çağırın

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

Tabii ki iki değeri iletmek için işlevi değiştirebilirsiniz.


10

Bence bu sana yardımcı olacak

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

Lütfen kodunuza OP'nin bundan öğrenebileceği bir açıklama ekleyin
Nico Haase

Dakikalar için$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

Kesirleri / ondalıkları içeren gün, saat, dakika veya saniye olarak sonuç döndüren daha evrensel bir sürüm:

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

Lütfen kodunuza OP'nin bundan öğrenebileceği bir açıklama ekleyin
Nico Haase

7

Ben php> 5.2 .. "xx kez önce" bu şekilde görüntülenen .. İşte DateTime nesnesi hakkında daha fazla bilgi

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

Çıktı:

75

3

Süreleri çıkarın ve 60'a bölün.

Aşağıda geçen süreyi 2019/02/01 10:23:45dakika cinsinden hesaplayan bir örnek verilmiştir :

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

2

İki tarih arasındaki farkı bulmak için çözümüm burada. Bu işlev ile saniye, dakika, saat, gün, yıl ve ay gibi farkları bulabilirsiniz.

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

Bu işlevi geliştirebilirsiniz. Test ettim ve benim için çalışıyor. DateInterval nesne çıktısı burada:

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

İşlev Kullanımı:

$ date = geçmiş tarih, $ diff = tür örneğin: "dakika", "gün", "saniye"

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

İyi şanslar.


0

Bu yardımcı olacak....

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
Lütfen kodunuza OP'nin bundan öğrenebileceği bir açıklama ekleyin
Nico Haase

0

Çok fazla çözüm buldum ama hiçbir zaman doğru çözümü bulamadım. Ama dakika bulmak için bazı kod oluşturduk lütfen kontrol edin.

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

Saat ve dakika cinsinden çıktı verir; örneğin 01 saat 02 dakika 01:02 gibi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.