diff --git a/src/Validation/Validation.php b/src/Validation/Validation.php index d948660981a..942c4e1c81b 100644 --- a/src/Validation/Validation.php +++ b/src/Validation/Validation.php @@ -400,6 +400,9 @@ public static function time($check) if ($check instanceof \DateTime) { return true; } + if (is_array($check)) { + $check = static::_getDateString($check); + } return static::_check($check, '%^((0?[1-9]|1[012])(:[0-5]\d){0,2} ?([AP]M|[ap]m))$|^([01]\d|2[0-3])(:[0-5]\d){0,2}$%'); } diff --git a/tests/TestCase/Validation/ValidationTest.php b/tests/TestCase/Validation/ValidationTest.php index 98924bb5524..1a1d7891589 100644 --- a/tests/TestCase/Validation/ValidationTest.php +++ b/tests/TestCase/Validation/ValidationTest.php @@ -1558,6 +1558,31 @@ public function testTime() $this->assertFalse(Validation::time('9:00')); } + /** + * test time validation when passing an array + * + * @return void + */ + public function testTimeArray() + { + $date = ['hour' => 13, 'minute' => 14, 'second' => 15]; + $this->assertTrue(Validation::time($date)); + + $date = [ + 'hour' => 1, 'minute' => 14, 'second' => 15, + 'meridian' => 'am' + ]; + $this->assertTrue(Validation::time($date)); + + $date = [ + 'hour' => 'farts', 'minute' => 'farts' + ]; + $this->assertFalse(Validation::time($date)); + + $date = []; + $this->assertFalse(Validation::time($date)); + } + /** * testBoolean method *