PHP 回合时间和小时数

发布于 2024-10-17 22:33:39 字数 176 浏览 3 评论 0原文

我需要转几次。我想知道如何将时间舍入到下一小时并将其用作 PHP 中的 int 。

例如:

24:00:02 -> 25  
33:15:05 -> 34  
48:40:30 -> 49

有什么想法吗?

问候 克劳迪奥

I need to round some times. I would like to know how I can round a time to the next hour and use that as an int in PHP.

Ex:

24:00:02 -> 25  
33:15:05 -> 34  
48:40:30 -> 49

Any ideas?

Regards
Claudio

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风渺 2024-10-24 22:33:39

您需要类似 DateTime::setTime 的内容。使用日期函数提取小时/分钟/秒,确定小时是否需要增加,然后将小时设置为适当的值,并将分钟和秒归零。

唔。再次阅读你的问题,如下所示:

$sec = date('s', $timevalue);
$min = date('i', $timevalue);
$hour = date('G', $timevalue);

if (($sec > 0) or ($min > 0)) { $hour++; } // if at x:00:01 or better, "round up" the hour

You'd want something like DateTime::setTime. Use the date functions to extract the hours/minutes/seconds, figure out if the hour needs to be incremented, then set the hour to the appropriate value and zero out the minutes and seconds.

hmm. on reading your question again, something like this:

$sec = date('s', $timevalue);
$min = date('i', $timevalue);
$hour = date('G', $timevalue);

if (($sec > 0) or ($min > 0)) { $hour++; } // if at x:00:01 or better, "round up" the hour
潜移默化 2024-10-24 22:33:39

我假设您使用的格式是 HOURS:MINUTES:SECONDS,表示持续时间而不是一天中的某个时间,并且我假设您已将此值作为字符串获得。在这种情况下,您的解决方案是一个自制函数,因为这是一个非常具体的情况。像这样的东西:

function roundDurationUp($duration_string='') {
     $parts = explode(':', $duration_string);
     // only deal with valid duration strings
     if (count($parts) != 3)
       return 0;

     // round the seconds up to minutes
     if ($parts[2] > 30)
       $parts[1]++;

     // round the minutes up to hours
     if ($parts[1] > 30)
       $parts[0]++;

     return $parts[0];
    }

print roundDurationUp('24:00:02'); // prints 25
print roundDurationUp('33:15:05'); // prints 34
print roundDurationUp('48:40:30'); // prints 49

尝试一下:http://codepad.org/nU9tLJGQ

I am assuming the format you're using is HOURS:MINUTES:SECONDS, expressing a duration of time rather than a time of day, and I'll assume that you've got this value as a string. In which case, your solution is a home-brew function, as this is a pretty specific case. Something like this:

function roundDurationUp($duration_string='') {
     $parts = explode(':', $duration_string);
     // only deal with valid duration strings
     if (count($parts) != 3)
       return 0;

     // round the seconds up to minutes
     if ($parts[2] > 30)
       $parts[1]++;

     // round the minutes up to hours
     if ($parts[1] > 30)
       $parts[0]++;

     return $parts[0];
    }

print roundDurationUp('24:00:02'); // prints 25
print roundDurationUp('33:15:05'); // prints 34
print roundDurationUp('48:40:30'); // prints 49

Try it: http://codepad.org/nU9tLJGQ

不念旧人 2024-10-24 22:33:39
function ReformatHourTime($time_str){
                $min_secs = substr($time_str,3);
                $direction = round($min_secs/60);

                if($dir == 1){
                    return $time_str+1;
                }else{
                    return floor($time_str);
                }
         }
function ReformatHourTime($time_str){
                $min_secs = substr($time_str,3);
                $direction = round($min_secs/60);

                if($dir == 1){
                    return $time_str+1;
                }else{
                    return floor($time_str);
                }
         }
回眸一笑 2024-10-24 22:33:39

如果您像处理数字一样处理时间字符串,PHP 会将其视为一个数字并删除除第一个数字之外的所有内容。

print '48:40:30' + 1; # 49
print '30:00:00' + 1; # 31

If you handle the time string like a number, PHP treats it like one and removes everyting but the first digits.

print '48:40:30' + 1; # 49
print '30:00:00' + 1; # 31
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文