2010-09-26 59 views
1

我有两个数据输入,您可以输入开始时间和结束时间。使用php或mysql查找时间差异在几分钟内

例如

start_time 13:00 

finish_time 14:40 

该条目将永远格式为HH:MM。

我想查找时间差异,在这种情况下为100分钟。

这样做的最佳方法是什么?

+1

如果start_time> finish_time会发生什么情况?例如,如果start_time在午夜之前,finish_time在 – 2010-09-26 17:32:04

+0

之后如果finish_time在start_time之前,只需在finish_time中添加一天并计算Unix时间戳之间的差异即可。 – 2010-09-26 18:27:46

回答

8

您可以在DateTime之内使用diff

#!/usr/bin/env php 

<?php 

$datetime1 = new DateTime('13:00'); 
$datetime2 = new DateTime('14:40'); 

$interval = $datetime1->diff($datetime2); 

$hours = $interval->format('%h'); 
$minutes = $interval->format('%i'); 

echo $hours * 60 + $minutes; 

?> 
0

如果我们在谈论PHP - PHP中的时间表示为unixtime - 从时代(1970年1月1日)开始的秒数。所以你只需要从另一个时刻开始,只需几秒钟即可获得差异。

如果在php中的时间是文本表示形式 - 您可以通过事先调用strtotime将其转换为unixtime。

2

可以使用的strtotime得到一个字符串的时间戳然后从时间戳获得的区别,之后将在几分钟内格式化的日期或时间是很容易。

Ex。

<?php 
    $start = "26 Sep, 2010 13:00"; 
    $end = "26 Sep, 2010 14:40"; 

    $timeStart = strtotime($start); 
    $timeEnd = strtotime($end); 

    $diff = ($timeEnd - $timeStart); 

    echo "Minutes : " . ($diff/60) . "<br />"; 
    echo "Date : " . date("j M, Y h:i:s a", $diff); //This would end up being the 
    //Years, months, days, hours, etc it took to complete the task. 
?> 
0

好了,让我们假设你在HH两个字符串:MM格式; $time1$time2说。我假设$time1$time2指同一天在同一时区的时间(除非$time1$time2之后,在这种情况下,我将假设$time2是在$time1之后的那一天)。

$time1 = explode(':', $time1); 
$time2 = explode(':', $time2); 
$time1_hours = intval($time1[0], 10); 
$time1_mins = intval($time1[1], 10); 
$time2_hours = intval($time2[0], 10); 
$time2_mins = intval($time2[1], 10); 
$time1_mins_past_midnight = 60 * $time1_hours + $time1_mins; 
$time2_mins_past_midnight = 60 * $time2_hours + $time2_mins; 
$time_difference = ($time1_mins_past_midnight > $time2_mins_past_midnight) ? 
        1440 + $time2_mins_past_midnight - $time1_mins_past_midnight : 
        $time2_mins_past_midnight - $time1_mins_past_midnight; 

现在$time_difference包含时间差,以分钟为单位。

1

如果你想要一个功能,这样就可以使这种计算多次在一个脚本:

/** 
* get_time_difference 
* 
* @param string start time 
* @param string finish time 
* @return int  time difference in minutes, rounded up 
*/ 
function get_time_difference($start, $finish) 
{ 
     return ceil(abs((strtotime($finish) - strtotime($start))/60)); 
} 

$start_time = '13:00'; 
$finish_time = '14:40'; 

$diff = get_time_difference($start_time, $finish_time); 
echo $diff; // 100 

注意使用ceil()功能(四舍五入),以避免任何小数的答案。

相关问题