summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormark <mark>2011-06-16 22:07:42 +0000
committermark <mark>2011-06-16 22:07:42 +0000
commit7ba804d78accc21c51ecc298623f5168e0875db2 (patch)
tree3cfb4efe80ad31f52c592996b268e3f752adb510
parent1ec6e14e7280515373bc9e1008f6c3dfb8ee66d8 (diff)
better calculation of prorate rounding, #13299
-rw-r--r--FS/FS/part_pkg/prorate_Mixin.pm8
1 files changed, 7 insertions, 1 deletions
diff --git a/FS/FS/part_pkg/prorate_Mixin.pm b/FS/FS/part_pkg/prorate_Mixin.pm
index ec4a1f5bf..a53728be2 100644
--- a/FS/FS/part_pkg/prorate_Mixin.pm
+++ b/FS/FS/part_pkg/prorate_Mixin.pm
@@ -55,7 +55,13 @@ sub calc_prorate {
my $mnow = $$sdate;
my ($sec, $min, $hour, $mday, $mon, $year) = (localtime($mnow))[0..5];
if( $self->option('prorate_round_day',1) ) {
- $mday++ if $hour >= 12;
+ # If the time is 12:00-23:59, move to the next day by adding 18
+ # hours to $mnow. Because of DST this can end up from 05:00 to 18:59
+ # but it's always within the next day.
+ $mnow += 64800 if $hour >= 12;
+ # Get the new day, month, and year.
+ ($mday,$mon,$year) = (localtime($mnow))[3..5];
+ # Then set $mnow to midnight on that date.
$mnow = timelocal(0,0,0,$mday,$mon,$year);
}
my $mend;