Browse Source

Correctly marshall 12:00 times with meridans.

Refs #7430
Mark Story 10 years ago
parent
commit
47bfec7093

+ 3 - 0
src/Database/Type/DateTimeType.php

@@ -165,6 +165,9 @@ class DateTimeType extends Type
             $format .= sprintf('%d-%02d-%02d', $value['year'], $value['month'], $value['day']);
         }
 
+        if (isset($value['meridian']) && (int)$value['hour'] === 12) {
+            $value['hour'] = 0;
+        }
         if (isset($value['meridian'])) {
             $value['hour'] = strtolower($value['meridian']) === 'am' ? $value['hour'] : $value['hour'] + 12;
         }

+ 3 - 3
src/Validation/Validation.php

@@ -1202,10 +1202,10 @@ class Validation
         }
 
         if (isset($value['hour'])) {
+            if (isset($value['meridian']) && (int)$value['hour'] === 12) {
+                $value['hour'] = 0;
+            }
             if (isset($value['meridian'])) {
-                if ((int)$value['hour'] === 12) {
-                    $value['hour'] = 0;
-                }
                 $value['hour'] = strtolower($value['meridian']) === 'am' ? $value['hour'] : $value['hour'] + 12;
             }
             $value += ['minute' => 0, 'second' => 0];

+ 8 - 0
tests/TestCase/Database/Type/DateTimeTypeTest.php

@@ -155,6 +155,14 @@ class DateTimeTypeTest extends TestCase
             [
                 [
                     'year' => 2014, 'month' => 2, 'day' => 14,
+                    'hour' => 12, 'minute' => 04, 'second' => 15,
+                    'meridian' => 'pm'
+                ],
+                new Time('2014-02-14 12:04:15')
+            ],
+            [
+                [
+                    'year' => 2014, 'month' => 2, 'day' => 14,
                     'hour' => 1, 'minute' => 14, 'second' => 15,
                     'meridian' => 'pm'
                 ],