【问题标题】:Subtract time in PHP在 PHP 中减去时间
【发布时间】:2011-07-24 17:28:28
【问题描述】:

我已经找了几个小时的答案,但我找不到。

我正在写一个简单的script。用户设置他们的工作开始和结束时间。例如,有人从 8:00 工作到 16:00。 我怎样才能减去这个时间来看看这个人工作了多长时间?

我正在尝试strtotime();,但没有成功...

【问题讨论】:

    标签: php datetime time subtraction


    【解决方案1】:

    更好一点的是:

    $a = new DateTime('08:00'); $b = new DateTime('16:00'); $interval = $a->diff($b); echo $interval->format("%H");

    这会给您带来小时数的差异。

    【讨论】:

    • 不知道能不能把整个区间转换成秒? ->format('%S') 只是给了我间隔输出的秒部分,而不是计算的总秒数。
    【解决方案2】:

    如果你得到有效的日期字符串,你可以使用这个:

    $workingHours = (strtotime($end) - strtotime($start)) / 3600;
    

    这将为您提供一个人的工作时间。

    【讨论】:

    • 您可以除以 60 而不是 3600 得到分钟,然后除以 60 并向下取整 (floor()) 得到整小时,剩下的分钟数%60 得到分钟。跨度>
    • 日期('H:i',$workingHours)。我不建议在这里使用 strtottime,因为 strtotime 会返回日期的 unix 时间戳。
    【解决方案3】:

    另一种解决方案是检查 Unix 时间戳整数值差异(以秒为单位)。

    <?php
        $start = strtotime('10-09-2019 12:01:00');
          $end = strtotime('12-09-2019 13:16:00');
    
          $hours = intval(($end - $start)/3600);
          echo $hours.' hours'; //in hours
    
          //If you want it in minutes, you can divide the difference by 60 instead
          $mins = (int)(($end - $start) / 60);
          echo $mins.' minutues'.'<br>';
    ?>
    

    如果您的原始日期以 Unix 时间戳格式存储,则此解决方案会更好。

    【讨论】:

    • 欢迎来到 Stack Overflow。在用现有答案回答一个八年前的问题时,指出您的答案所针对的问题的哪些新方面很有用。通过添加解释,包括代码解决问题的原因和方式,几乎总是可以改进仅代码的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多