From e8f9000fcca4fd542f7f82e2288d3a627053dd77 Mon Sep 17 00:00:00 2001 From: Rolando Isidoro Date: Fri, 1 Aug 2014 09:42:30 +0100 Subject: [PATCH] Bug 12669: Use floating timezone when handling dates without hours, minutes and seconds. Test plan: 1. Create a new serial record or pick an existing one; 2. Add a "New subscription" and set the "First issue publication date" and "Frequency" values so that the "Planned date" for a given issue hits a day where a transition to Daylight Saving Time (DST) occurs ex:. 1979-04-01 in Europe/Lisbon (http://www.timeanddate.com/time/change/portugal/lisbon?year=1979) ... use this website page as a source http://www.timeanddate.com/time/dst/2014.html to find a suitable transition to DST in your timezone in the current year. 3. From the "Subscription detail" page in Koha for the given record click the "Serial collection" link on the left side context menu. Expected result: Prior to applying the patch the error described in this bug report should occur. After the patch is applied the "Serial collection" page should load correctly. Signed-off-by: Colin Campbell Signed-off-by: Chris Cormack Signed-off-by: Kyle M Hall Signed-off-by: Tomas Cohen Arazi --- Koha/DateUtils.pm | 5 ++++- Koha/Template/Plugin/KohaDates.pm | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Koha/DateUtils.pm b/Koha/DateUtils.pm index 43581378b5..001d7abdd6 100644 --- a/Koha/DateUtils.pm +++ b/Koha/DateUtils.pm @@ -129,7 +129,10 @@ sub output_pref { return unless defined $dt; # FIXME: see bug 13242 => no TZ for dates 'infinite' - $dt->set_time_zone( C4::Context->tz ) if $dt->ymd !~ /^9999/; + if ( $dt->ymd !~ /^9999/ ) { + my $tz = $dateonly ? DateTime::TimeZone->new(name => 'floating') : C4::Context->tz; + $dt->set_time_zone( $tz ); + } my $pref = defined $force_pref ? $force_pref : C4::Context->preference('dateformat'); diff --git a/Koha/Template/Plugin/KohaDates.pm b/Koha/Template/Plugin/KohaDates.pm index 37d03af52d..b4c1d8d1e1 100644 --- a/Koha/Template/Plugin/KohaDates.pm +++ b/Koha/Template/Plugin/KohaDates.pm @@ -29,7 +29,10 @@ sub filter { my ( $self, $text, $args, $config ) = @_; return "" unless $text; $config->{with_hours} //= 0; - my $dt = dt_from_string( $text, 'iso' ); + + my $tz = DateTime::TimeZone->new(name => 'floating') unless $config->{with_hours}; + my $dt = dt_from_string( $text, 'iso', $tz ); + return $config->{as_due_date} ? output_pref({ dt => $dt, as_due_date => 1 }) : output_pref({ dt => $dt, dateonly => !$config->{with_hours} }); -- 2.39.5