diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToHtml5DateTimeLocalTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformer.php similarity index 83% rename from src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToHtml5DateTimeLocalTransformer.php rename to src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformer.php index 041e516483..ed90331266 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToHtml5DateTimeLocalTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformer.php @@ -16,17 +16,18 @@ use Symfony\Component\Form\Exception\TransformationFailedException; /** * @author Franz Wilding * @author Bernhard Schussek + * @author Fred Cox */ -class DateTimeToHtml5DateTimeLocalTransformer extends BaseDateTimeTransformer +class DateTimeToHtml5LocalDateTimeTransformer extends BaseDateTimeTransformer { const HTML5_FORMAT = 'Y-m-d\\TH:i:s'; /** - * Transforms a normalized date into a localized date without trailing timezone. + * Transforms a \DateTime into a local date and time string. * * According to the HTML standard, the input string of a datetime-local * input is a RFC3339 date followed by 'T', followed by a RFC3339 time. - * http://w3c.github.io/html-reference/datatypes.html#form.data.datetime-local + * https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-local-date-and-time-string * * @param \DateTime|\DateTimeInterface $dateTime A DateTime object * @@ -57,7 +58,11 @@ class DateTimeToHtml5DateTimeLocalTransformer extends BaseDateTimeTransformer } /** - * Transforms a formatted datetime-local string into a normalized date. + * Transforms a local date and time string into a \DateTime. + * + * When transforming back to DateTime the regex is slightly laxer, taking into + * account rules for parsing a local date and time string + * https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#parse-a-local-date-and-time-string * * @param string $dateTimeLocal Formatted string * diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php index 28df7eb7ed..4913957117 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php @@ -15,7 +15,7 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\DataTransformer\ArrayToPartsTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DataTransformerChain; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer; -use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToHtml5DateTimeLocalTransformer; +use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToHtml5LocalDateTimeTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTransformer; @@ -75,7 +75,7 @@ class DateTimeType extends AbstractType if ('single_text' === $options['widget']) { if (self::HTML5_FORMAT === $pattern) { - $builder->addViewTransformer(new DateTimeToHtml5DateTimeLocalTransformer( + $builder->addViewTransformer(new DateTimeToHtml5LocalDateTimeTransformer( $options['model_timezone'], $options['view_timezone'] )); diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToHtml5DateTimeLocaleTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformerTest.php similarity index 88% rename from src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToHtml5DateTimeLocaleTransformerTest.php rename to src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformerTest.php index f2645ac0c5..5dac998ad1 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToHtml5DateTimeLocaleTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformerTest.php @@ -12,9 +12,9 @@ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; use PHPUnit\Framework\TestCase; -use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToHtml5DateTimeLocalTransformer; +use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToHtml5LocalDateTimeTransformer; -class DateTimeToHtml5DateTimeLocaleTransformerTest extends TestCase +class DateTimeToHtml5LocalDateTimeTransformerTest extends TestCase { public static function assertEquals($expected, $actual, $message = '', $delta = 0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false) { @@ -59,7 +59,7 @@ class DateTimeToHtml5DateTimeLocaleTransformerTest extends TestCase */ public function testTransform($fromTz, $toTz, $from, $to) { - $transformer = new DateTimeToHtml5DateTimeLocalTransformer($fromTz, $toTz); + $transformer = new DateTimeToHtml5LocalDateTimeTransformer($fromTz, $toTz); $this->assertSame($to, $transformer->transform(null !== $from ? new \DateTime($from) : null)); } @@ -70,7 +70,7 @@ class DateTimeToHtml5DateTimeLocaleTransformerTest extends TestCase */ public function testTransformDateTimeImmutable($fromTz, $toTz, $from, $to) { - $transformer = new DateTimeToHtml5DateTimeLocalTransformer($fromTz, $toTz); + $transformer = new DateTimeToHtml5LocalDateTimeTransformer($fromTz, $toTz); $this->assertSame($to, $transformer->transform(null !== $from ? new \DateTimeImmutable($from) : null)); } @@ -80,7 +80,7 @@ class DateTimeToHtml5DateTimeLocaleTransformerTest extends TestCase */ public function testTransformRequiresValidDateTime() { - $transformer = new DateTimeToHtml5DateTimeLocalTransformer(); + $transformer = new DateTimeToHtml5LocalDateTimeTransformer(); $transformer->transform('2010-01-01'); } @@ -89,7 +89,7 @@ class DateTimeToHtml5DateTimeLocaleTransformerTest extends TestCase */ public function testReverseTransform($toTz, $fromTz, $to, $from) { - $transformer = new DateTimeToHtml5DateTimeLocalTransformer($toTz, $fromTz); + $transformer = new DateTimeToHtml5LocalDateTimeTransformer($toTz, $fromTz); if (null !== $to) { $this->assertEquals(new \DateTime($to), $transformer->reverseTransform($from)); @@ -103,7 +103,7 @@ class DateTimeToHtml5DateTimeLocaleTransformerTest extends TestCase */ public function testReverseTransformRequiresString() { - $transformer = new DateTimeToHtml5DateTimeLocalTransformer(); + $transformer = new DateTimeToHtml5LocalDateTimeTransformer(); $transformer->reverseTransform(12345); } @@ -112,7 +112,7 @@ class DateTimeToHtml5DateTimeLocaleTransformerTest extends TestCase */ public function testReverseTransformWithNonExistingDate() { - $transformer = new DateTimeToHtml5DateTimeLocalTransformer('UTC', 'UTC'); + $transformer = new DateTimeToHtml5LocalDateTimeTransformer('UTC', 'UTC'); $transformer->reverseTransform('2010-04-31T04:05'); } @@ -122,7 +122,7 @@ class DateTimeToHtml5DateTimeLocaleTransformerTest extends TestCase */ public function testReverseTransformExpectsValidDateString() { - $transformer = new DateTimeToHtml5DateTimeLocalTransformer('UTC', 'UTC'); + $transformer = new DateTimeToHtml5LocalDateTimeTransformer('UTC', 'UTC'); $transformer->reverseTransform('2010-2010-2010'); }