为什么这个加法函数有时在PHP中不起作用?

为什么这个加法函数有时在PHP中不起作用?,php,algorithm,function,math,time,Php,Algorithm,Function,Math,Time,我目前正在编写一个类来管理特定格式的时间。输出始终采用以下格式:0000:00:0:00:00,表示YYYY:WW:D:HH:MM。 我有一个添加时间的函数,在我多次尝试调用它之前,它似乎工作得很好 我使用此代码添加时间,它应该返回0000:00:0:00:42,但它返回0000:00:0:03:60 这是我的全班同学上的代码演示 不确定整个过程是否是实现您想要的目标的最佳方法,但这就是问题所在(我认为) 仅以分钟代码为例 public function addMinutes(int $add

我目前正在编写一个类来管理特定格式的时间。输出始终采用以下格式:
0000:00:0:00:00
,表示
YYYY:WW:D:HH:MM
。 我有一个添加时间的函数,在我多次尝试调用它之前,它似乎工作得很好

我使用此代码添加时间,它应该返回
0000:00:0:00:42
,但它返回
0000:00:0:03:60

这是我的全班同学上的代码演示


不确定整个过程是否是实现您想要的目标的最佳方法,但这就是问题所在(我认为)

仅以分钟代码为例

public function addMinutes(int $addedMinutes): void {
    $newMinutes = $this->minute + $addedMinutes;
    if($newMinutes >= 60) {
        $hours = round($newMinutes / 60, 0, PHP_ROUND_HALF_DOWN);
        $this->addHours($hours);
    }
    $this->minute += $newMinutes % 60;
}
因此,首先将新的分钟数添加到现有时间中

$newMinutes = $this->minute + $addedMinutes;
处理小时滚动,然后再次添加新的分钟字段

$this->minute += $newMinutes % 60;
这在每一层重复

所以我建议

public function addMinutes(int $addedMinutes): void {
    $newMinutes = $this->minute + $addedMinutes;
    if($newMinutes >= 60) {
        $hours = floor($newMinutes / 60);
        $this->addHours($hours);
        $newMinutes -= ($hours * 60);
    }
    $this->minute = $newMinutes;
}
这会进行类似的处理,但最后一部分只是分配新的分钟数,而不是再次添加它们


请注意,我还更改了下一个级别的计算方式-使用
floor()
而不是
round()

,因此
WW
部分应该是什么-周数?那么,为什么您首先要为此编写自己的类,而不使用PHP的DateTime呢?显示日期的周数毕竟只是输出格式的问题。@04FS我以前使用过DateTime类,但它不能显示零时间。是的,WW是周数。“但它不能显示零时间”-确切的意思是什么?@04FS PHP的
DateTime
类不能显示零时间,因为它遵循日历格式。虽然,我的时间需要从零开始,DateTime类无法做到这一点。这是可行的,但当我尝试添加400分钟时,我会返回
0000:00:0:07:-20
。我已更新代码-更改了行
$hours=floor($newMinutes/60)作为
floor()
是(IMHO)做这一点的正确方法。太棒了,又成功了。非常感谢你的时间和帮助,这帮我省去了很多挫折。