From 359b7c3b2e5648ef2ad289a464a384785e991e20 Mon Sep 17 00:00:00 2001 From: Markus Fischer Date: Sun, 18 Dec 2016 00:05:50 +0100 Subject: [PATCH] [5.3] Revert #16692 and make date_format work with ISO8601 again (#16845) * Revert "Merge pull request #16692 from rohitsubedi/rohitsubedi-patch-1" This reverts commit 4c70ab042d45d858c0d0715f3fed3d9505f93057, reversing changes made to e91f04b52603194dbc90dbbaee730e171bee1449. * validation: add a few more date_format tests Showing off how Y-m-d\TH:i:sP matches multple valid ISO 8601 date formats. * validation: add test showing 00-00-01 passes for Y-m-d It's unexpected for Y to match two-digit dates --- src/Illuminate/Validation/Validator.php | 4 ++-- tests/Validation/ValidationValidatorTest.php | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Illuminate/Validation/Validator.php b/src/Illuminate/Validation/Validator.php index 6d6ad2e10bf6..c12ea54ee7b4 100755 --- a/src/Illuminate/Validation/Validator.php +++ b/src/Illuminate/Validation/Validator.php @@ -1841,9 +1841,9 @@ protected function validateDateFormat($attribute, $value, $parameters) return false; } - $date = DateTime::createFromFormat($parameters[0], $value); + $parsed = date_parse_from_format($parameters[0], $value); - return $date && $date->format($parameters[0]) === $value; + return $parsed['error_count'] === 0 && $parsed['warning_count'] === 0; } /** diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index 74a6cde60107..68fc7b138ca1 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -2121,8 +2121,23 @@ public function testValidateDateAndFormat() $v = new Validator($trans, ['x' => '22000-01-01'], ['x' => 'date_format:Y-m-d']); $this->assertTrue($v->fails()); + $v = new Validator($trans, ['x' => '00-01-01'], ['x' => 'date_format:Y-m-d']); + $this->assertTrue($v->passes()); + $v = new Validator($trans, ['x' => ['Not', 'a', 'date']], ['x' => 'date_format:Y-m-d']); $this->assertTrue($v->fails()); + + $v = new Validator($trans, ['x' => '2000-01-01T00:00:00Z'], ['x' => 'date_format:Y-m-d\TH:i:sP']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['x' => '2000-01-01T00:00:00Z'], ['x' => 'date_format:Y-m-d\TH:i:sP']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['x' => '2000-01-01T00:00:00+00'], ['x' => 'date_format:Y-m-d\TH:i:sP']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['x' => '2000-01-01T00:00:00+00:30'], ['x' => 'date_format:Y-m-d\TH:i:sP']); + $this->assertTrue($v->passes()); } public function testBeforeAndAfter()