Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 找出两次之间的差异_Php - Fatal编程技术网

Php 找出两次之间的差异

Php 找出两次之间的差异,php,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

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

$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小时,这是错误的。正确的方法是什么?

你需要
strotime('14:30')
而不是
strotime(143000)


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

您使用
地板
就是为什么这些输入只获得1小时。如果将答案保持为浮点数,则这些输入将导致1.7小时<代码>楼层自动向下舍入到较低的整数值。查看更多信息

$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"
更新:

我刚刚注意到你对长耳朵回答的评论。请再次检查我上面的评论,它们是正确的。输入“09:11:00”和“09:33:00”的值将在0小时(22分钟)内产生结果

如果您输入这些值并得到4个小时,您的数学很可能有十进制错误。使用'09:11'到'09:33',结果是.367小时。如果将STROTOTIME结果除以360而不是3600,则结果将为3.67小时(或4小时,取决于取整方法)

strotime
表示自Unix纪元以来的秒数。由于将这两个值都转换为秒,然后相互减去这些值,因此得到的值是秒数。一小时内有3600秒

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


您正在计算小时数的差异。更改strotime('14:30:00')后,“开始时间是09:19:00,结束时间是11:01: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 ';
$time1='09:19:00';
$time2='11:01:00';
echo“Time1:”.$t1=strotime($Time1);
echo“
Time2:”.$t2=strotime($Time2); echo“
End:”.$End=strottime('14:30:00'); 回声“
下限值:”; var_垃圾场(地板(($end-$t1)/60)/60); //$Hours=楼层(($t2-$t1)/60)/60); $Hours=楼层(($end-$t1)/60)/60); echo$Hours.‘Hours’;
您可以使用
$hour=($end-$t1)/(60*60)

在这种情况下,时间格式为(秒*分钟*天*月*年)=>(60*60*2)

函数getTimeDiff($dtime,$atime)
{
$nextDay=$dtime>$atime?1:0;
$dep=分解(“:”,$dtime);
$arr=爆炸(“:”,$atime);
$diff=abs(mktime($dep[0]、$dep[1]、0、日期('n')、日期('j')、日期('y'))-mktime($arr[0]、$arr[1]、0、日期('n')、日期('j')+$nextDay、日期('y'));
//时辰
$hours=楼层($diff/(60*60));
//分钟
$mins=楼层($diff-($hours*60*60))/(60));
//第二
$secs=楼层($diff-($hours*60*60)+($mins*60));
如果(strlen($hours)更好的方法是使用


谢谢亲爱的,但是你知道我的持续时间不正确吗好的,谢谢所有现在试图帮助的人对于一些任务,持续时间是正确的,但是对于一些任务仍然是错误的,比如有些人在09:11:00开始他的任务,在09:33:00结束,它给了我4小时的持续时间?!
143000是指14:30
?它的意思是什么>也请参见
echo(new DateTime($time2))->diff(new DateTime($time1))->format('h');
好的,感谢所有现在尝试帮助完成某些任务的人,持续时间是正确的,但对于某些任务仍然是错误的,比如有些人在09:11:00开始任务,在09:33:00完成,这给了我4小时的持续时间?!
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')));

    //Hour

    $hours=floor($diff/(60*60));

    //Minute 

    $mins=floor(($diff-($hours*60*60))/(60));

    //Second

    $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;

}

echo getTimeDiff("23:30","01:30");
$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');