From eff38d42710afd97436082d037e28a835ffcaf54 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 28 May 2020 16:12:57 +0200 Subject: [PATCH] Bug 25617: (bug 25133 follow-up) 12 PM is not 24 but 0 There was an error in the precedent code, in 12hr format, 12PM is actually 00:00 Signed-off-by: Nick Clemens Signed-off-by: Julian Maurice Signed-off-by: Alex Arnaud Signed-off-by: Jonathan Druart (cherry picked from commit dd0c7c55fc2b5f0a312055d0c051b166d75ea82d) Signed-off-by: Aleisha Amohia (cherry picked from commit 04791a15cae2cc0c9c5fd2ccc9b2aeca3930f67a) Signed-off-by: Victor Grousset/tuxayo --- Koha/DateUtils.pm | 9 ++++++++- t/DateUtils.t | 27 +++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Koha/DateUtils.pm b/Koha/DateUtils.pm index 3763f3f31c..33182b88e8 100644 --- a/Koha/DateUtils.pm +++ b/Koha/DateUtils.pm @@ -183,7 +183,14 @@ sub dt_from_string { $dt_params{minute} = 00 unless defined $dt_params{minute}; $dt_params{second} = 00 unless defined $dt_params{second}; - $dt_params{hour} += 12 if $ampm && $ampm eq 'PM'; + if ( $ampm ) { + if ( $ampm eq 'AM' ) { + $dt_params{hour} = 00 if $dt_params{hour} == 12; + } elsif ( $dt_params{hour} != 12 ) { # PM + $dt_params{hour} += 12; + $dt_params{hour} = 00 if $dt_params{hour} == 24; + } + } my $dt = eval { DateTime->new( diff --git a/t/DateUtils.t b/t/DateUtils.t index 3c861d6fbe..b7cd33c044 100755 --- a/t/DateUtils.t +++ b/t/DateUtils.t @@ -4,7 +4,7 @@ use DateTime::TimeZone; use C4::Context; -use Test::More tests => 76; +use Test::More tests => 79; use Test::MockModule; use Test::Warn; @@ -258,7 +258,30 @@ $dt = dt_from_string('2015-01-31 01:02 PM'); is( output_pref( {dt => $dt} ), '31/01/2015 13:02', 'dt_from_string ' ); $dt = dt_from_string('2015-01-31 01:02:03 PM'); is( output_pref( {dt => $dt} ), '31/01/2015 13:02', 'dt_from_string ' ); - +$dt = dt_from_string('2015-01-31 12:02 AM'); +is( output_pref( {dt => $dt} ), '31/01/2015 00:02', 'dt_from_string ' ); +$dt = dt_from_string('2015-01-31 12:02:03 AM'); +is( output_pref( {dt => $dt} ), '31/01/2015 00:02', 'dt_from_string ' ); + +subtest 'TimeFormat 12hr' => sub { + plan tests => 4; + + $dt = DateTime->new( year => 2020, month => 5, day => 28, hour => 12, minute => 49 ); + t::lib::Mocks::mock_preference('TimeFormat', '12hr'); + my $output = output_pref({ dt => $dt, dateformat => 'iso' }); + $dt = dt_from_string( $output, 'iso' ); + is( output_pref( {dt => $dt} ), '28/05/2020 12:49 PM' ); + t::lib::Mocks::mock_preference('TimeFormat', '24hr'); + is( output_pref( {dt => $dt} ), '28/05/2020 12:49' ); + + $dt = DateTime->new( year => 2020, month => 5, day => 28, hour => 0, minute => 49 ); + t::lib::Mocks::mock_preference('TimeFormat', '12hr'); + $output = output_pref({ dt => $dt, dateformat => 'iso' }); + $dt = dt_from_string( $output, 'iso' ); + is( output_pref( {dt => $dt} ), '28/05/2020 12:49 AM' ); + t::lib::Mocks::mock_preference('TimeFormat', '24hr'); + is( output_pref( {dt => $dt} ), '28/05/2020 00:49' ); +}; # output_pref with no parameters, single parameter (no hash) is( output_pref(), undef, 'Call output_pref without parameters' ); -- 2.39.5