Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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_Hour_Minute - Fatal编程技术网

php中的小时、分钟差

php中的小时、分钟差,php,hour,minute,Php,Hour,Minute,我正在寻找一个Php解决方案 我有hh:mm:ss格式的任务总时间。(日期不重要)。 我也以hh:mm:ss格式输入每个工作时间。现在我必须以hh:mm:ss格式找出剩余的小时数 范例 16:00:00是执行任务的指定时间。 在不同日期,一名员工工作时间为13:15:00 现在我需要剩下的时间是2:45:00 如果附上日期,我们可以这样做 datetime1 = new DateTime('2014-02-11 04:04:26 AM'); $datetime2 = new DateTime('

我正在寻找一个Php解决方案

我有hh:mm:ss格式的任务总时间。(日期不重要)。 我也以hh:mm:ss格式输入每个工作时间。现在我必须以hh:mm:ss格式找出剩余的小时数

范例

16:00:00是执行任务的指定时间。 在不同日期,一名员工工作时间为13:15:00 现在我需要剩下的时间是2:45:00

如果附上日期,我们可以这样做

datetime1 = new DateTime('2014-02-11 04:04:26 AM');
$datetime2 = new DateTime('2014-02-11 05:36:56 AM');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%h')." Hours ".$interval->format('%i')." Minutes";

就我而言,没有日期。PHP中是否有任何功能可以查找这种类型的hh:mm:ss差异?

您必须将其转换为时间戳,然后计算差异并将该差异格式化为正常日期

大概是这样的:

function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' )
{
    $datetime1 = date_create($date_1);
    $datetime2 = date_create($date_2);

    $interval = date_diff($datetime1, $datetime2);

    return $interval->format($differenceFormat);

}

将HH:MM:SS格式转换为以秒为单位的持续时间,减去它们,将它们重新格式化为HH:MM:SS:

function str_to_seconds($duration) {
    list($h, $m, $s) = explode(':', $duration);
    return $s + ($m * 60) + ($h * 3600);
}

function seconds_to_str($seconds) {
    return sprintf('%02d:%02d:%02d', $seconds / 3600, $seconds / 60 % 60, $seconds % 60);
}

echo seconds_to_str(str_to_seconds('16:00:00') - str_to_seconds('13:15:00'));
超短版

$secondsDiff = abs(strtotime("2014-02-11 04:04:26 AM") - strtotime("2014-02-11 05:36:56 AM"));
echo sprintf("%02d", floor($secondsDiff / 3600)) . ":" . sprintf("%02d", floor($secondsDiff / 60 %60)) . ":" . sprintf("%02d", ($secondsDiff % 60));

如果没有日期,只需使用任何日期(两个字段显然相同),它将显示小时数差异,如果不起作用,只需使用当前日期:)我会避免使用任何日期对象,除非您专门使用UTC,因为任何隐含的本地时区都会使您在DST切换日上陷入循环,并且/或者您将不必要地与时区发生冲突。持续时间不是时间戳,不应该这样对待。