Làm thế nào để tính chênh lệch phút giữa hai lần ngày trong PHP?
Làm thế nào để tính chênh lệch phút giữa hai lần ngày trong PHP?
Câu trả lời:
Trừ đi phần lớn quá khứ từ phần lớn tương lai và chia cho 60.
Thời gian được thực hiện ở định dạng Unix vì vậy chúng chỉ là một số lớn hiển thị số giây từ January 1, 1970, 00:00:00 GMT
Các câu trả lời ở trên dành cho các phiên bản cũ hơn của PHP. Sử dụng lớp DateTime để thực hiện bất kỳ phép tính ngày nào bây giờ vì PHP 5.3 là chuẩn. Ví dụ.
$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>';
$ Kể từ khi bắt đầu là một đối tượng DateInterval . Lưu ý rằng thuộc tính ngày khả dụng (vì chúng tôi đã sử dụng phương thức diff của lớp DateTime để tạo đối tượng DateInterval).
Đoạn mã trên sẽ xuất ra:
1837 ngày tổng cộng
5 năm
0 tháng
10 ngày
6 giờ
14 phút
2 giây
Để có được tổng số phút:
$minutes = $since_start->days * 24 * 60;
$minutes += $since_start->h * 60;
$minutes += $since_start->i;
echo $minutes.' minutes';
Điều này sẽ xuất ra:
2645654 phút
Đó là số phút thực tế đã trôi qua giữa hai ngày. Lớp DateTime sẽ đưa tính năng tiết kiệm ánh sáng ban ngày (tùy theo múi giờ) vào tài khoản "cách cũ" sẽ không. Đọc hướng dẫn về Ngày và Giờ http://www.php.net/manual/en/book.datetime.php
inSeconds()
hoặc một cái gì đó tương tự, bây giờ nó là sự lặp lại mã ở mọi nơi tôi cần để tính toán sự khác biệt trong vài giây.
$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
câu trả lời ở trên không? Điều này có vẻ giống như một trường hợp của OOP khi Thủ tục là AT LEAST là giải pháp hợp lệ (và ngắn gọn hơn đáng kể).
Đây là câu trả lời:
$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
phương tiện: chia cho sáu mươi, làm tròn đến hai chữ số thập phân gần nhất.
strtotime
có thể bị lỗi thời nhưng nó không đáng tin nếu bạn sử dụng đúng cách. Lý do là bạn cần phải làm việc với các định dạng ngày nhất quán để có thể đọc (hoặc phân tích) ngày chính xác. Xem ISO 8601
và đừng đổ lỗi cho các công cụ: =)
<?php
$date1 = time();
sleep(2000);
$date2 = time();
$mins = ($date2 - $date1) / 60;
echo $mins;
?>
sleep
để tính chênh lệch ngày?
Nó hoạt động trên các chương trình của tôi, tôi đang sử dụng date_diff
, bạn có thể kiểm tra date_diff
hướng dẫn tại đây .
$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);
Bạn nhận được kết quả những gì bạn muốn.
một cách khác với múi giờ.
$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');
và khác là ($days * 1440 + $hours * 60 + $minutes)
. Trong nhiều tháng, nhiều năm => cùng logic
Tôi đã viết chức năng này cho một trang blog của mình (sự khác biệt giữa ngày trước và ngày của máy chủ). Nó sẽ cung cấp cho bạn một đầu ra như thế này
"49 giây trước", "20 phút trước", "21 giờ trước", v.v.
Tôi đã sử dụng một chức năng giúp tôi có được sự khác biệt giữa ngày trôi qua và ngày của máy chủ.
<?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";
}
}
?>
Lưu nó dưới dạng một tập tin giả sử "date.php". Gọi hàm từ một trang khác như thế này
<?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);
?>
Tất nhiên bạn có thể sửa đổi hàm để truyền hai giá trị.
Tôi nghĩ rằng điều này sẽ giúp bạn
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";
}
}
Một phiên bản phổ quát hơn trả về kết quả sau vài ngày, giờ, phút hoặc giây bao gồm phân số / số thập phân:
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
Đây là cách tôi hiển thị "xx lần trước" trong php> 5.2 .. đây là thông tin thêm về đối tượng 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;
?>
Đầu ra:
75
Giải pháp của tôi để tìm sự khác biệt giữa hai ngày là ở đây. Với chức năng này, bạn có thể tìm thấy sự khác biệt như giây, phút, giờ, ngày, năm và tháng.
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;
}
}
Bạn có thể phát triển chức năng này. Tôi đã thử nghiệm và làm việc cho tôi. Đầu ra đối tượng DateInterval ở đây:
/*
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 )
*/
Chức năng sử dụng:
$ date = ngày qua, $ diff = type, ví dụ: "phút", "ngày", "giây"
$diff_mins = alihan_diff_dates("2019-03-24 13:24:19", "minutes");
Chúc may mắn.
Điều này sẽ giúp....
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;
}
Tôi tìm thấy rất nhiều giải pháp nhưng tôi không bao giờ có giải pháp chính xác. Nhưng tôi đã tạo ra một số mã để tìm phút xin vui lòng kiểm tra nó.
<?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;
?>
Nó cho đầu ra tính theo giờ và phút, ví dụ 01 giờ 02 phút như 01:02