Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re^3: Round time to nearest 15 or 30 minutes

by DrHyde (Prior)
on Apr 25, 2006 at 10:05 UTC ( #545517=note: print w/replies, xml ) Need Help??

in reply to Re^2: Round time to nearest 15 or 30 minutes
in thread Round time to nearest 15 or 30 minutes

If you want the nearest 15 minute boundary, then the code is wrong. It will give you the previous 15 minute boundary.

You need to:

  • add $interval/2 minutes to the time;
  • subtract the remainder you'd get when dividing by $interval minutes.

Note that the modulus operator % only works with integers. In practice, you can probably ignore the fraction of a minute that gets thrown away. If you can't, then you'll need to write your own remainder function.

Replies are listed 'Best First'.
Re^4: Round time to nearest 15 or 30 minutes
by bill_mcgonigle (Acolyte) on May 18, 2010 at 01:04 UTC
    Ah, this was very helpful, thanks. Not being too clever in these matters, I didn't quite understand the above, but it got me close enough to experiment successfully (though I don't quite get the second bullet item). In my case I was after an offset to add to a unixtime, so that's how the code is oriented.
    for (my $i = 0; $i < 60; $i++) { my $offset = getOffsetToNearestInterval($i,15); print "$i: " . ($i + $offset) . ' (' . $offset . ')' . "\n"; } sub getOffsetToNearestInterval { my $number = shift; my $interval = shift; my $nearest_interval = ( $interval * int( ($number + ($interval/2) + ) / $interval) ); my $offset_to_interval = $nearest_interval - $number; return $offset_to_interval; }
    Hope this helps the next guy stumbling on this thread.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://545517]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (6)
As of 2020-05-29 21:05 GMT
Find Nodes?
    Voting Booth?
    If programming languages were movie genres, Perl would be:

    Results (171 votes). Check out past polls.