PHP四舍五入到:00或:30

PHP四舍五入到:00或:30,php,date,time,Php,Date,Time,我在这里看过其他的答案,但它们似乎对我没有帮助 如果数据库中的时间是05:30,而当前时间是05:59,我希望将其取整回05:30而不是06:00,但一旦时间达到06:00,我希望它停留在:00分钟,直到达到06:30 这有意义吗?这就像把时间缩短了半个小时 我正在尝试从另一个网站获取的代码,但它只运行:00分钟,如果超过:30分钟,则不会运行:30分钟 $hour = date('H'); $minute = (date('n')>30)?'30':'00'; $roundnow = "

我在这里看过其他的答案,但它们似乎对我没有帮助

如果数据库中的时间是05:30,而当前时间是05:59,我希望将其取整回05:30而不是06:00,但一旦时间达到06:00,我希望它停留在:00分钟,直到达到06:30

这有意义吗?这就像把时间缩短了半个小时

我正在尝试从另一个网站获取的代码,但它只运行:00分钟,如果超过:30分钟,则不会运行:30分钟

$hour = date('H');
$minute = (date('n')>30)?'30':'00';
$roundnow = "$hour:$minute";

谢谢。

如果你利用一小时有3600秒,半小时有1800秒这一事实,这是一个非常简单的操作。这允许我们使用时间戳模数1800来按照您的意愿对时间进行取整

在处理日期和时间时,我总是使用,因此这样的函数可以为您完成以下工作:-

/**
 * @param DateTime $dateTime The dateTime to be rounded
 *
 * @return DateTime The rounded DateTime
 */
function roundDateTime(\DateTime $dateTime)
{
    $rounded = clone $dateTime; //Avoid side effects
    $rounded->setTimestamp($rounded->getTimestamp() - $rounded->getTimestamp() % 1800);
    return $rounded;
}

您可以使用一些测试代码来证明它是正确的。

n
是月份号。你想要
i
。一次完成:
$roundnow=date('H:i')
@user3617359别担心,我自己写了不止一次的
date(“Y-m-dh:m:s”)
。你可能想使用
=30
,这样
:30
-甚至可以留在那里(如果你想要的话)。请注意这样的“边缘情况”。由于PHP 5>=5.5.0,您可以(也应该)使用DateTimeImmutable以避免副作用。@Kamillatoski您是对的,我现在这样做了,但是,这个答案是在可用之前编写的。