Bug 25617: (bug 25133 follow-up) 12 PM is not 24 but 0
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 28 May 2020 14:12:57 +0000 (16:12 +0200)
committerVictor Grousset/tuxayo <victor@tuxayo.net>
Wed, 17 Jun 2020 19:55:09 +0000 (21:55 +0200)
There was an error in the precedent code, in 12hr format, 12PM is
actually 00:00

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>
Signed-off-by: Alex Arnaud <alex.arnaud@biblibre.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
(cherry picked from commit dd0c7c55fc2b5f0a312055d0c051b166d75ea82d)

Signed-off-by: Aleisha Amohia <aleishaamohia@hotmail.com>

(cherry picked from commit 04791a15cae2cc0c9c5fd2ccc9b2aeca3930f67a)
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>

Koha/DateUtils.pm
t/DateUtils.t

index 3763f3f..33182b8 100644 (file)
@@ -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(
index 3c861d6..b7cd33c 100755 (executable)
@@ -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' );