@@ -, +, @@ => OK => OK 'America/Los_Angeles' ); => KO (~20sec on my laptop) my $borrower_debar_dt = dt_from_string( $borrower->{debarred} ); --- Koha/DateUtils.pm | 5 +++++ t/DateUtils.t | 10 ++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) --- a/Koha/DateUtils.pm +++ a/Koha/DateUtils.pm @@ -53,6 +53,11 @@ to the system preferences. If the date string is empty DateTime->now is returned sub dt_from_string { my ( $date_string, $date_format, $tz ) = @_; + + if ( $date_string =~ /^9999-/ ) { + return DateTime::Format::DateParse->parse_datetime($date_string); + } + if ( !$tz ) { $tz = C4::Context->tz; } --- a/t/DateUtils.t +++ a/t/DateUtils.t @@ -1,11 +1,9 @@ -use strict; -use warnings; -use 5.010; +use Modern::Perl; use DateTime; use DateTime::TimeZone; use C4::Context; -use Test::More tests => 37; +use Test::More tests => 38; use Test::MockModule; use Time::HiRes qw/ gettimeofday /; @@ -114,6 +112,10 @@ cmp_ok( $dt0->ymd(), 'eq', $ymd, 'Returned object corrects iso day 0' ); $dt0 = dt_from_string( '0000-00-00', 'iso' ); is( $dt0, undef, "undefined returned for 0 iso date" ); +# Return undef if passed mysql 9999-* date +my $dt9999 = dt_from_string( '9999-12-31' ); +is( $dt9999->ymd(), '9999-12-31', "dt_from_string should return a DateTime object for 9999-12-31" ); + my $formatted = format_sqldatetime( '2011-06-16 12:00:07', 'metric', '24hr' ); cmp_ok( $formatted, 'eq', '16/06/2011 12:00', 'format_sqldatetime conversion' ); --