php - 正确减去PHP中的时间

标签 php postgresql time subtraction

我使用了一些表格来确定用户工作的持续时间以及他们工作的加类时间。问题是我想知道多少小时可以加类,多少小时是正常时间。现在很明显,从总时间中减去加类时间,但是我使用以下脚本来获取时间量:

$logtime = new CGenRs("SELECT time_id,
  profile_id ,
  user_number ,
  start_time ,
  end_time,
  description,
  exported,ovt_start_time,ovt_end_time, EXTRACT(hour FROM(end_time - start_time)) as diff,EXTRACT(minute FROM(end_time - start_time))as difference,EXTRACT(hour FROM(ovt_end_time-ovt_start_time)) as ovt_diff,EXTRACT(minute FROM(ovt_end_time-ovt_start_time)) as ovt_difference from adapt_profile_time where exported = 'f' order by user_number", $cao);
$logtime->first();

Extract 功能可以很好地显示时间,但是当我开始减去它时,它会变得有点困惑。

$tot_mins = 0;
            $ovt_mins = 0;
        }
        $tot_mins = ($tot_mins + $logtime->valueof('diff') * 60) + $logtime->valueof('difference');
        $ovt_mins = ($ovt_mins + $logtime->valueof('ovt_diff') * 60) + $logtime->valueof('ovt_difference');
    $total_test= floor(($tot_mins / 60)-($ovt_mins / 60))." hours ".(($tot_mins % 60)-($ovt_mins % 60))." minutes ";

当使用 echo $total_test 时,它会进行计算,但如果用户工作了 7 小时 0 分钟,其中包括 3 小时 40 分钟的加类时间,则上述计算结果返回 3 小时 -40分钟。这是错误的。 那么我哪里出错了?

我认为问题在于 EXTRACT 小时和分钟不能很好地与“-”“+”运算符配合使用。我在我的表中添加了一个总列,将总时间与加类时间相加(它应该被减去但我这样做是为了测试)我使用了以下代码:

<td><?php echo ($logtime->valueof('diff')   +  $logtime->valueof('ovt_diff')) . " " . "hours" . " ".(($logtime->valueof('difference') + $logtime->valueof('ovt_difference')))." "."minutes"  ?></td>

结果很有趣。如果用户工作了 3 小时 50 分钟,其中全部是加类,则返回的结果是 6 小时 100 分钟。所以添加是有效的,它只是时间格式中的值无法识别

最佳答案

正如我在评论中所述,明智的做法是使用 DateTime您想要执行的任何日期/时间操作的类。包括获取时间之间的差异。

看看这个例子:

// Create two new DateTime-objects...
$Date1 = new DateTime('2015-10-21T8:00:00');
$Date2 = new DateTime('2015-10-21T18:30:00');

// The diff-methods returns a new DateInterval-object...
$Diff = $Date2->diff($Date1);

// Call the format method on the DateInterval-object
echo $Diff->format('%h:%i');

上面代码的输出应该是“10:30”

从这里开始,您可以简单地了解时间之间的差异,并检查它是否超过 8 小时。如果是,您可以获得加类费。

关于php - 正确减去PHP中的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33253079/

相关文章:

php - 如何使用 Zend 服务亚马逊?

sql - 一般的 PostgreSQL 或 SQL : LEFT OUTER JOIN and WHERE condition behave unexpectedly (for me? )

php - 30秒后更新MYSQL数据库

java - 使用迭代器将元素交换到链表的顶部

c - 添加延迟到时间格式结构 "tm"

php - 安全转义表名/列名

php - SSL 证书问题 : self signed certificate

javascript - 立即将差异和随机日期转换为秒

postgresql - pgAdmin 到 pgpool 的连接错误

postgresql - Postgres - 如何调试/跟踪 'Idle in transaction' 连接