PHP iki tarih-saat arasındaki dakika farkı nasıl hesaplanır?
PHP iki tarih-saat arasındaki dakika farkı nasıl hesaplanır?
Yanıtlar:
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
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
inSeconds()
veya benzer bir şey yok, şimdi saniyeler içinde farkı hesaplamak için gereken her yerde kod tekrarı var.
$dateFrom = new DateTime('2007-09-01 04:10:58'); $dateTo = new DateTime('2012-09-11 10:25:00'); echo ($dateTo->getTimestamp()-$dateFrom->getTimestamp())/60 ;
strtotime
cevabı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.
İş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";
/ 60,2
araçlar: altmışa bölün, en yakın iki ondalık basamağa yuvarlayın.
strtotime
eski 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 8601
Araçları görün ve suçlamayın: =)
<?php
$date1 = time();
sleep(2000);
$date2 = time();
$mins = ($date2 - $date1) / 60;
echo $mins;
?>
sleep
Tarih farkını hesaplamak için neden bazılarına ihtiyacınız olduğunu açıklayabilir misiniz ?
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.
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);
$days = $interval->format('%d');
ve farktan daha fazladır ($days * 1440 + $hours * 60 + $minutes)
. Aylar, yıllar => aynı mantık
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.
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;
}
$minutes = floor(($seconds/60)%60);
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";
}
}
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
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;
}
<?php
$start = strtotime('12:01:00');
$end = strtotime('13:16:00');
$mins = ($end - $start) / 60;
echo $mins;
?>
Çıktı:
75
İ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.
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;
}
Ç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