From 33cf00683bfbb04733b4d1ae7a29a5c7807e1257 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Wed, 11 Mar 2020 15:59:19 +0000 Subject: [PATCH] Bug 24850: Correct offset handling in dt_from_string This patch adds correct handling for when an offset is passed within an RFC3339 formatted datetime. Test plan 1/ Run the DateUtils test and varify it now passes. --- Koha/DateUtils.pm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Koha/DateUtils.pm b/Koha/DateUtils.pm index c20256c21d..cc474a6ddb 100644 --- a/Koha/DateUtils.pm +++ b/Koha/DateUtils.pm @@ -117,7 +117,7 @@ sub dt_from_string { (?\d{2}) : (?\d{2}) - (\.\d{1,3})?(([Zz])|([\+|\-]([01][0-9]|2[0-3]):[0-5][0-9])) + (\.\d{1,3})?(([Zz])|((?[\+|\-])(?[01][0-9]|2[0-3]):(?[0-5][0-9]))) /xms; } elsif ( $date_format eq 'iso' or $date_format eq 'sql' ) { @@ -154,6 +154,9 @@ sub dt_from_string { minute => $+{minute}, second => $+{second}, ); + if ( $+{offset} ) { + $tz = DateTime::TimeZone->new( name => $+{offset} . $+{hours} . $+{minutes} ); + } } elsif ( $date_string =~ $fallback_re ) { %dt_params = ( year => $+{year}, @@ -180,7 +183,7 @@ sub dt_from_string { DateTime->new( %dt_params, # No TZ for dates 'infinite' => see bug 13242 - ( $dt_params{year} < 9999 ? ( time_zone => $tz->name ) : () ), + ( $dt_params{year} < 9999 ? ( time_zone => $tz ) : () ), ); }; if ($@) { @@ -188,7 +191,7 @@ sub dt_from_string { $dt = DateTime->new( %dt_params, # No TZ for dates 'infinite' => see bug 13242 - ( $dt_params{year} < 9999 ? ( time_zone => $tz->name ) : () ), + ( $dt_params{year} < 9999 ? ( time_zone => $tz ) : () ), ); } return $dt; -- 2.20.1