【问题标题】:PHP negative time calculationPHP负时间计算
【发布时间】: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";

【问题讨论】:

标签: php time subtraction


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2011-05-22
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
相关资源
最近更新 更多