I have two times - For eg- the current time - 08:24 and date is 02/01/2013 in dd/mm/yyyy format and I have another time at 13:46 and date is 31/12/2012 . So, how can I calculate the difference between the 2 times in hours using PHP. (i.e. 42.63 hours) Thanks in advance.
7 回答
将它们都转换为时间戳值,然后减去以秒为单位。
$ts1 = strtotime(str_replace('/', '-', '02/01/2013 08:24'));
$ts2 = strtotime(str_replace('/', '-', '31/12/2012 13:46'));
$diff = abs($ts1 - $ts2) / 3600;
另一种方法是使用 PHP 的日期相关类。下面的示例DateTime::diff()
用于获取DateInterval
对象 ( $interval
)。然后,它使用间隔的属性得出间隔中的总小时数。
$a = DateTime::createFromFormat('H:i d/m/Y', '08:24 02/01/2013');
$b = DateTime::createFromFormat('H:i d/m/Y', '13:46 31/12/2012');
$interval = $a->diff($b);
$hours = ($interval->days * 24) + $interval->h
+ ($interval->i / 60) + ($interval->s / 3600);
var_dump($hours); // float(42.633333333333)
我有一个简单的解决方案,试试这个 -
echo getTimeDiff("10:30","11:10");
function getTimeDiff($dtime,$atime)
{
$nextDay = $dtime>$atime?1:0;
$dep = explode(':',$dtime);
$arr = explode(':',$atime);
$diff = abs(mktime($dep[0],$dep[1],0,date('n'),date('j'),date('y'))-mktime($arr[0],$arr[1],0,date('n'),date('j')+$nextDay,date('y')));
$hours = floor($diff/(60*60));
$mins = floor(($diff-($hours*60*60))/(60));
$secs = floor(($diff-(($hours*60*60)+($mins*60))));
if(strlen($hours)<2){$hours="0".$hours;}
if(strlen($mins)<2){$mins="0".$mins;}
if(strlen($secs)<2){$secs="0".$secs;}
return $hours.':'.$mins.':'.$secs;
}
如果您将日期作为时间戳(strtotime
如果需要使用),则只需减去它们,可选择取绝对值,然后除以 3600(一小时的秒数)。轻松^_^
我认为以下代码有助于了解如何使用 PHP 计算时差
function date_diff($date_1 , $date_2 , $format) {
$datetime1 = date_create($date_1);
$datetime2 = date_create($date_2);
$diff = date_diff($datetime1, $datetime2);
return $diff->format($format);
}
上面的函数对于计算两次以及日期之间的差异很有用。日期作为输出格式的参数给出。
输出格式如下:
// '%y 年 %m 月 %d 日 %h 时 %i 分 %s 秒' => 1 年 3 月 14 日 11 小时 49 分 36 秒 // '%y 年 %m 月 %d 日' = > 1 年 3 月 14 天 // '%m 月 %d 天' => 3 个月 14 天 // '%d 天 %h 小时' => 14 天 11 小时 // '%d 天' => 14 天// '%h 时 %i 分 %s 秒' => 11 小时 49 分 36 秒 // '%i 分 %s 秒' => 49 分 36 秒 // '%h 小时 => 11 小时 // ' %a 天
把这个放在这里,对于任何需要在' AND 'Hours
中找到两个日期/时间戳之间的差异的人!Minutes
Seconds
$futureDate_raw = '12/13/2018'; // This is your finish date.
$fdate = strtotime($futureDate_raw);
$hours = (($fdate - time()) / 3600;
$mins = (($fdate - time()) % 3600) / 60;
$seconds = ((($fdate- time()) % 3600) % 60);
我发现这是找到时差的最简单方法,它总是对我有用
$timestamp1 = strtotime(date('Y-m-d H:i'));
$timestamp2 = strtotime("2020-04-05 18:00");
$diff = abs($timestamp2 - $timestamp1)/(60*60);
echo $diff;