发现两次之间的差异

时间:2011-03-03 06:13:22

标签: php

我编写了以下代码来确定员工在任务上花费的时间:

$time1 = $row_TicketRS['OpenTime'];
$time2= $row_TicketRS['CloseTime'];

$t1=strtotime($time1); 
$t2=strtotime($time2);


$end=strtotime(143000);  //143000 is reference to 14:30


//$Hours =floor((($t2 - $t1)/60)/60); 

$Hours = floor((($end- $t1)/60)/60);


echo   $Hours.' Hours '; 

上面的代码没有给我正确的时间。

例如,如果开始时间为09:19:00,结束时间为11:01:00,则只给出1小时的持续时间,这是错误的。什么是正确的方法?

6 个答案:

答案 0 :(得分:7)

您使用floor就是为什么这些输入只需1小时。如果您将答案保持为浮点数,那么这些输入将导致1.7小时。 floor自动向下舍入到较低的整数值。查看http://php.net/manual/en/function.floor.php了解详情。

$t1 = strtotime('09:19:00');
$t2 = strtotime('11:01:00');
$hours = ($t2 - $t1)/3600;   //$hours = 1.7

如果你想要更细粒度的时差,你可以把它充实......

echo floor($hours) . ':' . ( ($hours-floor($hours)) * 60 );  // Outputs "1:42"

<强>更新

我刚刚注意到你对Long Ears回答的评论。请再次检查我的评论,它们是正确的。输入'09:11:00'和'09:33:00'的值导致0小时(22分钟)。

如果您输入这些值并获得4小时,则数学中可能会出现小数误差。使用'09:11'到'09:33',结果是.367小时。如果您将strtotime结果除以360而不是3600,则结果为3.67小时(或4小时,具体取决于您的舍入方法)。

strtotime converts your time to an int value表示自Unix纪元以来的秒数。由于您将两个值都转换为秒,然后相互减去值,因此结果值是秒数。 1小时内有3600秒。

答案 1 :(得分:4)

更改strtotime('14:30:00')一切正常后......见下文

$time1 = '09:19:00';
$time2= '11:01:00';

echo "Time1:".$t1=strtotime($time1); 
echo "<br/>Time2:".$t2=strtotime($time2);    

echo "<br/>End:".$end=strtotime('14:30:00'); 
echo  "<br/>Floor value:";  
var_dump(floor((($end- $t1)/60)/60));     

//$Hours =floor((($t2 - $t1)/60)/60); 

$Hours = floor((($end- $t1)/60)/60);    

echo   $Hours.' Hours ';

答案 2 :(得分:1)

更好的方法是使用http://php.net/manual/en/datetime.diff.php

$start_t = new DateTime($start_time);
$current_t = new DateTime($current_time);
$difference = $start_t ->diff($current_t );
$return_time = $difference ->format('%H:%I:%S');

答案 3 :(得分:0)

您需要strtotime('14:30')而不是strtotime(143000)

编辑:实际上令我惊讶的是,strtotime(143000)似乎确实有预期的效果,但只有两位数的小时数,所以我仍然不会依赖它。无论如何,这不是你问题的原因;)

答案 4 :(得分:0)

  

例如开始时间是09:19:00,结束时间是11:01:00但它给我持续时间只有1小时这是错误的

您正在计算小时数的差异。 “开始时间是09:19:00,结束时间是11:01:00”

的正确结果是什么

答案 5 :(得分:0)

您可以使用$hour = ($end - $t1)/(60*60)

此时间格式为(秒*分钟*天*月*年)=&gt; (60 * 60 * 2)