字符串表示在php中超过24小时的时间

字符串表示在php中超过24小时的时间,php,time,strtotime,Php,Time,Strtotime,有一个synatax errro,您的变量名是$hour,但在最后一个变量中使用了$hours $time1 = strtotime("02:40:00"); $time2 = strtotime("34:20:00"); $diff = $time2 - $time1; $hour = floor($diff / (60 * 60)); $minute = $diff - $hour * (60 * 60); //$final = $hours .":".floor( $minute

有一个synatax errro,您的变量名是$hour,但在最后一个变量中使用了$hours

$time1  = strtotime("02:40:00");
$time2 = strtotime("34:20:00");
$diff  = $time2 - $time1;

$hour   = floor($diff / (60 * 60));
$minute = $diff - $hour * (60 * 60);
//$final = $hours .":".floor( $minute / 60 );
$final = $hour .":".floor( $minute / 60 );

echo $final;

您可以使用如下自定义函数:-

<?php

$actual_time = "34:20";

$time_to_reduce = "2:40";

function timeSubtactionFirstTime($actual_time ,$time_to_reduce){
   $actual_time_array = explode(":",$actual_time);
   $time_to_reduce = explode(":",$time_to_reduce);
   $final_result = [];
   if($actual_time_array[1] < $time_to_reduce[1]){
     $actual_time_array[0] = $actual_time_array[0]-1;
     $final_result[] = $actual_time_array[1]+60-$time_to_reduce[1];
   }else{
     $final_result[] = $actual_time_array[1]-$time_to_reduce[1];
   }
    $final_result[] = $actual_time_array[0]-$time_to_reduce[0];

    return implode(":", array_reverse($final_result));
}

echo timeSubtactionFirstTime($actual_time ,$time_to_reduce);

将时间字符串转换为DateInteval字符串

$time1  = "02:40:00";
$time2  = "34:20:00";

list($h, $m, $s) = explode(':', $time1);
$time1 = new DateInterval("PT{$h}H{$m}M{$s}S");
list($h, $m, $s) = explode(':', $time2);
$time2 = new DateInterval("PT{$h}H{$m}M{$s}S");

$T1 = new DateTime('midnight');
$T2 = clone $T1;
$T1->add($time1)->sub($time2);
$diff = $T2->diff($T1);

echo ($diff->invert ? '-' : '') . ($diff->d*24 + $diff->h) . ':' .$diff->i;

我有自己的方法:

<?php

/**
 * Calculate the number of hours and minutes between two times.
 * @param  string $start The start time
 * @param  string $end   The end time
 * @return string        The difference in hours and minutes
 */
function timeDiff( $start, $end )
{
    // Since the end time may be more than 23 hours ...
    $seg = (int) substr( $end, 0, 2 );

    // Add seconds to time2 ?
    $add = $seg > 23
        ? ( $seg - 23 ) * 3600
        : 0;

    // Subtract hours from time 2 if necessary
    if( $seg > 23 )
        $end = substr_replace( $end, '23', 0, 2 );

    // Compute the diff in seconds
    $time1 = strtotime($start);
    $time2 = strtotime($end) + $add;
    $diff  = $time2 - $time1;

    // How many hours and minutes were there ?
    $hour   = floor( $diff / (60 * 60) );
    $minute = $diff - $hour * (60 * 60);
    $minute = floor( $minute / 60 );

    // Pad the hours and minutes
    $hour = str_pad( $hour, 2, '0', STR_PAD_LEFT );
    $minute = str_pad( $minute, 2, '0', STR_PAD_LEFT );

    return $hour . ':' . $minute;
}

// Simple test
$start = "02:40:00";
$end   = "34:20:00";
echo timeDiff( $start, $end );

PHP中的日期时间函数用于处理实际日期时间。你所做的是处理类似日期时间的数学问题。请编写一个通用程序,用数学而不是默认的PHP函数来解决这个问题。您可以创建自己的类/函数来完成所需的算术运算。您在哪所大学找到了34h小时格式?为什么在
$final=$hours中使用$hours。“:”。floor($minute/60)
我第一次听说:-
34小时20分钟
如果php函数不能解决这个问题,我会要求解决所有问题。我如何减少我键入的上述数据?您不明白什么-如何从
02:00
获取
PT02H40M
?抱歉,我没有阅读您订购的将字符串转换为日期间隔的部分。你的帮助很有帮助,非常感谢你的帮助。
<?php

/**
 * Calculate the number of hours, minutes, 
 *   and seconds between two times.
 * @param  string $start The start time
 * @param  string $end   The end time
 * @return string        The difference in hours:minutes:seconds
 */
function timeDiff( $start, $end )
{
    // Since the end time may be more than 23 hours ...
    $seg = (int) substr( $end, 0, 2 );

    // Add seconds to time2 ?
    $add = $seg > 23
        ? ( $seg - 23 ) * 3600
        : 0;

    // Subtract hours from time 2 if necessary
    if( $seg > 23 )
        $end = substr_replace( $end, '23', 0, 2 );

    // Compute the diff in seconds
    $time1 = strtotime($start);
    $time2 = strtotime($end) + $add;
    $diff  = $time2 - $time1;

    // How many hours and minutes were there ?
    $hour   = floor( $diff / (60 * 60) );
    $minute = $diff - $hour * (60 * 60);
    $minute = floor( $minute / 60 );
    $second = $diff - ( $hour * 60 * 60 ) - ( $minute * 60 );

    // Pad the hours, minutes, and seconds
    $hour = str_pad( $hour, 2, '0', STR_PAD_LEFT );
    $minute = str_pad( $minute, 2, '0', STR_PAD_LEFT );
    $second = str_pad( $second, 2, '0', STR_PAD_LEFT );

    return $hour . ':' . $minute . ':' . $second;
}

// Simple test
$start = "02:40:00";
$end   = "34:20:45";
echo timeDiff( $start, $end );