PHP - 如何在不转换为十进制的情况下将时间减去总时间?

时间:2017-11-09 03:05:15

标签: php datetime time

我目前正在使用一个计时系统,它计算一周的基本时间总和,如果有一个晚期记录,则扣除一定的时间。

鉴于该员工本周的总工作时间为45小时(45:00),并且他/该周的总时间为50分钟(00:50),

使用,PHP。如何在不将时间转换为小数的情况下将延迟记录扣除到渲染的总小时数?上面样本的期望输出是44:10,因为00:50被扣除到45:00。

2 个答案:

答案 0 :(得分:0)

您可以将字符串转换为日期并获得差异。

function convertToHours($duration) {
   $duration = explode(':',$duration);
   $hours+= (int)$duration[0];
   $hours+= (int)$duration[1] / 60;
   return $hours;
}

输出将是:00:44:10

答案 1 :(得分:0)

我明白你的目标是减去前的持续时间。

45:00 - 00:50 = 44:10

1:创建一个将它们转换为小时的函数

    function secondsToDuration($seconds) {
      $H = floor($seconds / 3600);
      $i = ($seconds / 60) % 60;
      $s = $seconds % 60;
      return sprintf("%02d:%02d:%02d", $H, $i, $s);
    }

2:创建一个从秒转换为持续时间的函数:秒

$duration1 = convertToHours("25:00");
$duration2 = convertToHours("00:50");
  1. 使用创建的函数将它们转换为小时

    $difference = $duration1 - $duration2;
    
  2. 然后减去它们

    $duration = secondsToDuration($difference * 3600);
    
  3. 最后使用创建的方法将它们转换回持续时间

    # check valid cohort_period
    valid_cohort = df.cohort_period.ne(0)
    
    # cumulative sum revenue where cohort_period is not equal to zero and mask otherwise as nan
    df['cum_revenue'] = valid_cohort.mul(df.revenue).groupby(df.account_id).cumsum().where(valid_cohort)
    
    print(df)
    #  account_id  cohort_period               company  revenue  cum_revenue
    #0        111              0               initech     3.67          NaN
    #1        111              1               initech     9.95         9.95
    #2        111              2               initech     9.95        19.90
    #3        222              0  jackson steinem & co   193.29          NaN
    #4        222              1  jackson steinem & co   299.95       299.95
    #5        333              0                 ingen    83.03          NaN
    #6        333              1                 ingen   499.95       499.95
    #7        333              2                 ingen    99.95       599.90
    #8        666              0                 enron     1.52          NaN
    #9        666              1                 enron    19.95        19.95
    
  4. 请参阅Demo此处

    希望它可以帮到你