From 7402bf45516dfe627239e7a573b1cddc39ddaf76 Mon Sep 17 00:00:00 2001 From: mark Date: Fri, 15 Apr 2011 04:01:17 +0000 Subject: [PATCH] Timezone issues with this-month search, #11057 --- rt/lib/RT/Date.pm | 25 ++++++++++++++++--------- rt/lib/RT/Tickets_Overlay.pm | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/rt/lib/RT/Date.pm b/rt/lib/RT/Date.pm index cc66e0f5d..e68526c07 100644 --- a/rt/lib/RT/Date.pm +++ b/rt/lib/RT/Date.pm @@ -286,6 +286,8 @@ sub SetToStart { my %args = @_; my $tz = $args{'Timezone'} || ''; my @localtime = $self->Localtime($tz); + #remove 'offset' so that DST is figured based on the resulting time. + pop @localtime; # This is the cleanest way to implement it, I swear. { @@ -519,16 +521,21 @@ unix time. =cut -sub AddMonth { - require Time::ParseDate; +sub AddMonth { my $self = shift; - my $date = ( - Time::ParseDate::parsedate( - '1 month', - NOW => $self->Unix - ) - ); - return $self->Unix($date); + my %args = @_; + my @localtime = $self->Localtime($args{'Timezone'}); + # remove offset, as with SetToStart + pop @localtime; + + $localtime[4]++; #month + if ( $localtime[4] == 12 ) { + $localtime[4] = 0; + $localtime[5]++; #year + } + + my $new = $self->Timelocal($args{'Timezone'}, @localtime); + return $self->Unix($new); } =head2 Unix [unixtime] diff --git a/rt/lib/RT/Tickets_Overlay.pm b/rt/lib/RT/Tickets_Overlay.pm index 5a7e02056..ffbbc8539 100644 --- a/rt/lib/RT/Tickets_Overlay.pm +++ b/rt/lib/RT/Tickets_Overlay.pm @@ -548,7 +548,7 @@ sub _DateFieldLimit { $date->SetToNow; $date->SetToStart('month', Timezone => 'server'); $daystart = $date->ISO; - $date->AddMonth; + $date->AddMonth(Timezone => 'server'); $dayend = $date->ISO; } elsif ( lc($value) eq 'last month' ) { -- 2.11.0