PHP负时间计算

Posted

技术标签:

【中文标题】PHP负时间计算【英文标题】:PHP negative time calculation 【发布时间】:2022-01-23 18:52:27 【问题描述】:

如果我在 php 中加上 1 小时 35 分钟并减去 4 小时,我会得到 -3 小时 30 分钟的剩余时间。

但正确的应该是 -2 小时 30 分钟。哪里错了?

    $minutes = null;
    while ($z = $stmt->fetch()) 
        $minutes += $z['minutes'];
    

   
    if ($stmt = $pdo->prepare($sql)) 
        $stmt->execute(array(
            ':user' => $user
        ));
        $negativeTime = null;
        while ($z = $stmt->fetch()) 
            $negativeTime += $z['minutes'];
        
    
    $minutes = $minutes - $negativeTime;

    echo (floor($minutes / 60)) . " hours and " . ($minutes - floor($minutes / 60) * 60) . " minutes";

【问题讨论】:

请发帖minimal reproducible example。不需要 SQL 查询,只需发布​​ $minutes$negativeTime 的实际值即可。 【参考方案1】:

$minutes - floor($minutes/60) 是肯定的。所以你得到的是 -3 小时 30 分钟,也就是 -2:30。

您需要区别对待$minutes 的正值和负值,以便小时和分钟都是与零的距离。使用abs() 函数将时间转换为正数,执行计算,如果$minutes 的原始值为负数,则将小时数显示为负数。

$sign = $minutes < 0 ? '-' : '';
$minutes = abs($minutes);
$hours = floor($minutes / 60);
$minutes = $minutes % 60;

echo "$sign$hours hours and $minutes minutes";

DEMO

【讨论】:

我会接受你的解决方案 -2:30 而不是 -3:30? 为什么你不会得到负时间?你没在输出中看到$sign 吗? 它对我有用:ideone.com/1em0M3 $minutes$negativeTime 在合并之前的值是多少? 所以$minutes = $minutes - $negativeTime之后应该是$minutes = -150

以上是关于PHP负时间计算的主要内容,如果未能解决你的问题,请参考以下文章

C++ 浮点加法(从头开始):无法计算负结果

ValueError:计算负 IRR 时的数学域错误

计算 a^b,其中 b 是 c# 中的负指数

Chrome - Javascript:负指数计算对于 > -3 是错误的 [重复]

BZOJ 2242 [SDOI2011]计算器(快速幂+Exgcd+BSGS)

负 x 的泰勒级数 e^x 的误差