Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从时间中删除秒并将分钟舍入_Php_Laravel_Datetime - Fatal编程技术网

Php 从时间中删除秒并将分钟舍入

Php 从时间中删除秒并将分钟舍入,php,laravel,datetime,Php,Laravel,Datetime,我将时间条目存储到一个名为duration的变量中。所以现在如果我记录一个时间条目,它将采用标准格式:ex)12:30:00 我要做的是删除时间条目中的秒部分,并将分钟四舍五入到每15分钟一次。另外,我想删除前面的0,如果时间在10之前 所以09:00:00会变成9点 09:30:00就要到9:30了 所以12:30:00就是12:30 12:08:00应该是12:15 12:34:00将是12:30 ect 以下是我使用的代码: $duration = ''; if ($se

我将时间条目存储到一个名为duration的变量中。所以现在如果我记录一个时间条目,它将采用标准格式:ex)12:30:00

我要做的是删除时间条目中的秒部分,并将分钟四舍五入到每15分钟一次。另外,我想删除前面的0,如果时间在10之前

所以09:00:00会变成9点

09:30:00就要到9:30了

所以12:30:00就是12:30

12:08:00应该是12:15

12:34:00将是12:30 ect

以下是我使用的代码:

    $duration = '';

    if ($seconds < 0) {
        $duration = '-';
        $seconds  = abs($seconds);
    }

    $hours    = floor($seconds / 3600);
    $seconds -= $hours * 3600;
    $minutes  = floor($seconds / 60);
    $seconds -= $minutes * 60;

    return $duration . sprintf('%d:%02d:%02d', $hours, $minutes, $seconds);
}

试试这个

 $currentTime = strtotime('12:34:00');
 echo 'Rounded Up 15 Minutes time: ' . date('H:i',round($currentTime / (15 * 60)) * (15 * 60));
//output - Rounded Up 15 Minutes time: 12:30
如果这

 $currentTime = strtotime('12:08:00');
 echo 'Rounded Up 15 Minutes time: ' . date('H:i',round($currentTime / (15 * 60)) * (15 * 60));
//output - Rounded Up 15 Minutes time: 12:15
查看演示

对于回合,您可以使用分钟零条件进行检查,如

$currentTime = strtotime('9:00:00');
 if(date('i',ceil($currentTime / (15 * 60)) * (15 * 60)) == 00){
    echo date('H',ceil($currentTime / (15 * 60)) * (15 * 60));  
 }

你能提供你得到的输出吗?使用,我认为时区是不同的。我使用了
date()
将使用UTC默认值来确保您的时区为UTC或不同。是的,这是一个时区问题,谢谢。如果时间在10之前,我将如何修改此代码以使其截断为0。我用示例更新了我的OP。请仔细检查我在演示中使用的
ceil
,但在回答中它是
round
。让我更改演示链接,以便您可以@JetoJust checked检查它。11:44,四舍五入到11:45。老实说,我想做的没问题。我可以编辑OP使事情更清楚。@DilipHirapara我发现代码有问题。我想要它,这样我就可以得到没有前导零的小时数,所以09:00,应该是9:00。由于某些原因,当值在10:00:00之前时,因此当小时数为一位数时,显示的时间为00:00。有没有办法解决这个问题?
$currentTime = strtotime('9:00:00');
 if(date('i',ceil($currentTime / (15 * 60)) * (15 * 60)) == 00){
    echo date('H',ceil($currentTime / (15 * 60)) * (15 * 60));  
 }