stormakt
stormakt

Reputation: 511

Removing seconds from time and rounding the minutes

I'm storing time entries to a variable called duration. So right now If I log a time entry, it will be in the standard format: ex) 12:30:00

What I want to do is remove the seconds part of the time entry and round the minutes to every 15th minute. Also I'de like to remove the 0 in the front of if the times before 10.

So 09:00:00 would become 9

09:30:00 would be come 9:30

So 12:30:00 would be 12:30.

12:08:00 would be 12:15

12:34:00 would be 12:30 ect ect.

Here's the code I was using:

    $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);
}

and here's a sample output:

1 => "12:20:00"

Upvotes: 0

Views: 387

Answers (1)

Dilip Hirapara
Dilip Hirapara

Reputation: 15296

Try this.

 $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

If this

 $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

check demo. demo

For round, you may check with minutes zero condition like.

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

Upvotes: 1

Related Questions