Як обчислити різницю хвилин між двома датами-раз у PHP?
Як обчислити різницю хвилин між двома датами-раз у PHP?
Відповіді:
Відніміть минулу більшу частину від майбутньої самої і розділіть на 60.
Часи проводяться у форматі Unix, тому вони просто велика кількість, що показує кількість секунд від January 1, 1970, 00:00:00 GMT
Відповіді вище для старих версій PHP. Використовуйте клас DateTime для будь-яких обчислень дати, коли PHP 5.3 є нормою. Напр.
$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 - об'єкт DateInterval . Зауважте, що властивість днів доступна (оскільки ми використовували метод diff класу DateTime для створення об'єкта DateInterval).
Вищенаведений код виведе:
1837 днів всього
5 років
0 місяців
10 днів
6 годин
14 хвилин
2 секунди
Щоб отримати загальну кількість хвилин:
$minutes = $since_start->days * 24 * 60;
$minutes += $since_start->h * 60;
$minutes += $since_start->i;
echo $minutes.' minutes';
Це виведе:
2645654 хв
Яка фактична кількість хвилин, що пройшли між двома датами. Клас DateTime враховує літній час (залежно від часового поясу), де "старий спосіб" не буде. Прочитайте посібник про дату та час http://www.php.net/manual/en/book.datetime.php
inSeconds()
чи щось подібне, тепер це повторення коду скрізь, де мені потрібно обчислити різницю в секундах.
$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
відповідь над ним? Це виглядає як випадок OOP, коли Процедур є НАЙКРАЩИМИ як вірне (і значно більш стисле) рішення.
Ось відповідь:
$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
означає: розділити на шістдесят, округлити до найближчих двох знаків після коми.
strtotime
може бути застарілим, але це ненадійно, якщо ви ним правильно користуєтеся. Цілком зрозуміло, що вам потрібно працювати з послідовними форматами дат, щоб мати можливість читати (чи аналізувати) дати правильно. Побачте ISO 8601
і не звинувачуйте інструменти: =)
<?php
$date1 = time();
sleep(2000);
$date2 = time();
$mins = ($date2 - $date1) / 60;
echo $mins;
?>
sleep
для розрахунку різниці в датах?
Це працювало над моїми програмами, я використовую date_diff
, ви можете перевірити date_diff
керівництво тут .
$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);
Ви отримуєте результати, що хочете.
інший спосіб із часовим поясом.
$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');
і різниця є ($days * 1440 + $hours * 60 + $minutes)
. Місяцями, роками => одна і та ж логіка
Я написав цю функцію для одного свого сайту блогу (різниця між минулою датою та датою сервера). Це дасть вам такий вихід
"49 секунд тому", "20 хвилин тому", "21 годину тому" тощо
Я використав функцію, яка дозволила б мені змінити дату проходження та дату сервера.
<?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";
}
}
?>
Збережіть його як файл, припустимо, "date.php". Викличте функцію з іншої сторінки, як ця
<?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);
?>
Звичайно, ви можете змінити функцію для передачі двох значень.
Я думаю, що це вам допоможе
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";
}
}
Більш універсальна версія, яка повертає результат за днями, годинами, хвилинами чи секундами, включаючи дроби / десяткові дроби:
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
Ось так я відобразив "xx разів тому" в php> 5.2 .. тут є додаткова інформація про об'єкт DateTime
//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;
?>
Вихід:
75
Моє рішення знайти різницю між двома датами тут. За допомогою цієї функції ви можете знайти відмінності, такі як секунди, хвилини, години, дні, роки та місяці.
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;
}
}
Ви можете розвинути цю функцію. Я тестував і працює для мене. Вихід об'єкта DateInterval знаходиться тут:
/*
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 )
*/
Використання функції:
$ date = минула дата, $ diff = тип, наприклад: "хвилини", "дні", "секунди"
$diff_mins = alihan_diff_dates("2019-03-24 13:24:19", "minutes");
Щасти.
Це допоможе….
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;
}
Я знайшов так багато рішення, але ніколи не знайшов правильного рішення. Але я створив якийсь код, щоб знайти хвилини, будь ласка, перевірте його.
<?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;
?>
Це дає вихід у годинах і хвилинах, наприклад, 01:00 02 хвилин, як 01:02