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

Hi

Thanks a lot.
definitely I have to improve my logical Ideas.
That is working fine as expected.

"Keep pouring your ideas"
  • Comment on Re^2: Round time to nearest 15 or 30 minutes

Replies are listed 'Best First'.
Re^3: Round time to nearest 15 or 30 minutes
by DrHyde (Prior) on Apr 25, 2006 at 10:05 UTC
    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.

      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.