more useful options PerlMonks

### 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??

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.

Create A New User
Node Status?
node history
Node Type: note [id://545517]
help
Chatterbox?
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
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
If programming languages were movie genres, Perl would be:

Results (171 votes). Check out past polls.

Notices?