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

如何在PHP中使用累积小时数

如何在PHP中使用累积小时数,php,function,hour,cumulative-sum,Php,Function,Hour,Cumulative Sum,我将总工作时间以如下文本形式保存在数据库中: hhhh:mm,例如,一辆汽车的工作时间为789:07小时(789小时7分钟)。 工作时间可以增加或减少,我要做的是将字符串拆分为小时和分钟,并使操作如下: function addHours($initialTime, $endTime){ $hourStart = $this->getHoursMinutes($initialTime); $hourEnd = $this->getHoursMinu

我将总工作时间以如下文本形式保存在数据库中: hhhh:mm,例如,一辆汽车的工作时间为789:07小时(789小时7分钟)。 工作时间可以增加或减少,我要做的是将字符串拆分为小时和分钟,并使操作如下:

function addHours($initialTime, $endTime){
         $hourStart = $this->getHoursMinutes($initialTime);
         $hourEnd = $this->getHoursMinutes($endTime);

         $totalMinutes = $hourStart[1] + $hourEnd[1];

         $totalHours = 0;
         if($totalMinutes >= 60){
           $totalHours = 1;
           $totalMinutes -= 60;
         }

         $totalHours = $hourStart[0] + $hourEnd[0];

         return sprintf("%02d", $totalHours).":".sprintf("%02d", $totalMinutes);
       }
substract
方法是:

function substractHours($initialTime, $endTime){
         $hourStart = $this->getHoursMinutes($initialTime);
         $hourEnd = $this->getHoursMinutes($endTime);


         $totalHours = $hourEnd[0] - $hourStart[0];

         $totalMinutes = $hourEnd[1] - $hourStart[1];
         if($totalMinutes <0){
           $totalMinutes += 60;
           $totalHours--;
         }

         return sprintf("%02d", $totalHours).":".sprintf("%02d", $totalMinutes);
       }
function substractHours($initialTime,$endTime){
$hourStart=$this->getHoursMinutes($initialTime);
$hourEnd=$this->getHoursMinutes($endTime);
$totalHours=$hourEnd[0]-$hourStart[0];
$totalMinutes=$hourEnd[1]-$hourStart[1];

如果($totalMinutes您的问题是在小时符号和分钟符号不同时发生的,因为您需要将分钟转换为小时。因此您需要检查这些情况并相应地处理:

function substractHours($initialTime, $endTime){
  $hourStart = $this->getHoursMinutes($initialTime);
  $hourEnd = $this->getHoursMinutes($endTime);

  $totalHours = $hourEnd[0] - $hourStart[0];
  $totalMinutes = $hourEnd[1] - $hourStart[1];
  if($totalHours > 0 && $totalMinutes < 0) {
    $totalMinutes = 60 + $totalMinutes;
    $totalHours--;
  }
  else if ($totalHours < 0 && $totalMinutes > 0) {
    $totalMinutes = 60 - $totalMinutes;
    $totalHours++;
  }

  return sprintf("%02d", $totalHours).":".sprintf("%02d", $totalMinutes);
}
function substractHours($initialTime,$endTime){
$hourStart=$this->getHoursMinutes($initialTime);
$hourEnd=$this->getHoursMinutes($endTime);
$totalHours=$hourEnd[0]-$hourStart[0];
$totalMinutes=$hourEnd[1]-$hourStart[1];
如果($totalHours>0&&$totalMinutes<0){
$totalMinutes=60+$totalMinutes;
$totalHours--;
}
否则如果($totalHours<0&$totalMinutes>0){
$totalMinutes=60-$totalMinutes;
$totalHours++;
}
返回sprintf(“%02d”,$totalHours)。”:“.sprintf(“%02d”,$totalMinutes);
}
然而,将小时转换成分钟、做数学运算并转换回来可能更容易

$start = $hoursStart[0]*60 + $hoursStart[1];
$end = $hoursEnd[0]*60 + $hoursEnd[1];

// ... do math ...

$totalHours = floor(abs($total / 60));
$totalMinutes = abs($total) % 60;
$sign = $total < 0 ? "-" : "";
$start=$hoursStart[0]*60+$hoursStart[1];
$end=$hoursEnd[0]*60+$hoursEnd[1];
//…做数学。。。
$totalHours=地板(abs($total/60));
$totalMinutes=abs($total)%60;
$sign=$total<0?-“:”;

当小时和分钟的符号不同时,问题就出现了,因为您需要将分钟转换为小时。因此,您需要检查这些情况并相应地处理:

function substractHours($initialTime, $endTime){
  $hourStart = $this->getHoursMinutes($initialTime);
  $hourEnd = $this->getHoursMinutes($endTime);

  $totalHours = $hourEnd[0] - $hourStart[0];
  $totalMinutes = $hourEnd[1] - $hourStart[1];
  if($totalHours > 0 && $totalMinutes < 0) {
    $totalMinutes = 60 + $totalMinutes;
    $totalHours--;
  }
  else if ($totalHours < 0 && $totalMinutes > 0) {
    $totalMinutes = 60 - $totalMinutes;
    $totalHours++;
  }

  return sprintf("%02d", $totalHours).":".sprintf("%02d", $totalMinutes);
}
function substractHours($initialTime,$endTime){
$hourStart=$this->getHoursMinutes($initialTime);
$hourEnd=$this->getHoursMinutes($endTime);
$totalHours=$hourEnd[0]-$hourStart[0];
$totalMinutes=$hourEnd[1]-$hourStart[1];
如果($totalHours>0&&$totalMinutes<0){
$totalMinutes=60+$totalMinutes;
$totalHours--;
}
否则如果($totalHours<0&$totalMinutes>0){
$totalMinutes=60-$totalMinutes;
$totalHours++;
}
返回sprintf(“%02d”,$totalHours)。”:“.sprintf(“%02d”,$totalMinutes);
}
然而,将小时转换成分钟、做数学运算并转换回来可能更容易

$start = $hoursStart[0]*60 + $hoursStart[1];
$end = $hoursEnd[0]*60 + $hoursEnd[1];

// ... do math ...

$totalHours = floor(abs($total / 60));
$totalMinutes = abs($total) % 60;
$sign = $total < 0 ? "-" : "";
$start=$hoursStart[0]*60+$hoursStart[1];
$end=$hoursEnd[0]*60+$hoursEnd[1];
//…做数学。。。
$totalHours=地板(abs($total/60));
$totalMinutes=abs($total)%60;
$sign=$total<0?-“:”;

在这种情况下,最好将其存储在最小的单元中 分钟。每项操作都会更简单。您只需转换为 显示此数据时的最终格式

以下是显示格式化时间的函数示例:

function
formattedTime($min): string
{
    $sign = $min < 0 ? '-' : '';
    $min  = abs($min);

    return sprintf('%s%02d:%02d', $sign, intdiv($min, 60), $min % 60);
}

在这种情况下,最好将其存储在最小的单元中 分钟。每项操作都会更简单。您只需转换为 显示此数据时的最终格式

以下是显示格式化时间的函数示例:

function
formattedTime($min): string
{
    $sign = $min < 0 ? '-' : '';
    $min  = abs($min);

    return sprintf('%s%02d:%02d', $sign, intdiv($min, 60), $min % 60);
}

同时存储小时和分钟是没有意义的。只需坚持一个时间单位,并在整个应用程序中使用它。记住,计算机并不关心分钟和小时的区别,就计算机而言,它只是一个数字。只有用户关心

如果同时存储小时和分钟,则必须执行所有要执行的杂耍操作,但如果仅存储分钟,则对运行的总时间进行求和将成为一个简单的加法,甚至是一个
SELECT SUM(column\u name)
query

如果用户确实关心小时和分钟,则可以使用floor()和模数运算符在显示时进行简单转换

$hours = floor($total_minutes_as_fetched_from_database / 60);
$minutes = $total_minutes_as_fetched_from_database % 60;

echo "Total time is $hours hour(s) and $minutes minute(s)";

同时存储小时和分钟是没有意义的。只需坚持一个时间单位,并在整个应用程序中使用它。记住,计算机并不关心分钟和小时的区别,就计算机而言,它只是一个数字。只有用户关心

如果同时存储小时和分钟,则必须执行所有要执行的杂耍操作,但如果仅存储分钟,则对运行的总时间进行求和将成为一个简单的加法,甚至是一个
SELECT SUM(column\u name)
query

如果用户确实关心小时和分钟,则可以使用floor()和模数运算符在显示时进行简单转换

$hours = floor($total_minutes_as_fetched_from_database / 60);
$minutes = $total_minutes_as_fetched_from_database % 60;

echo "Total time is $hours hour(s) and $minutes minute(s)";

为什么不直接将分钟数存储到数据库中,然后进行计算呢?例如,789:07=47347分钟。然后是简单的数学运算和从分钟到小时的转换:首先将小时:分钟转换为分钟,然后进行加法或减法,再转换回小时:分钟。Hi@Ctwheels。这些字段已经存储为文本hh:mm,实际上没有o为了改变它,Thankshi@RavinderI尝试了一下,但后来它保持在:00:-6,这真是令人困惑,时间和分钟保持不同。Thanks@JuanBotero好的,那么只需正则表达式
(\d*):(\d*)
计算数字,将第一个捕获组
$1
乘以60,将其转换为分钟,然后将第二个捕获组
$2
相加。对这些值进行数学运算,然后再转换回。不过,最好的方法是将分钟存储在数据库中。编写一个函数,将值转换为分钟,并将其放入新的co中列,然后在将所有其余代码转换为使用新结构后,将列的名称更改为旧名称,瞧,为什么不将分钟数存储到数据库中,然后按这种方式计算?例如789:07=47347分钟