From eebad5c9aa8406fb0901d4f7ffbd0a08d51a2446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hinrik=20=C3=96rn=20Sigur=C3=B0sson?= Date: Thu, 21 Nov 2019 03:21:27 +0100 Subject: [PATCH] [PHP] Include microseconds in serialized date-time (#4542) * [PHP] Include milliseconds in serialized date-time * Add setDateTimeFormat() --- .../resources/php/ObjectSerializer.mustache | 17 +++++++++++++++-- .../OpenAPIClient-php/lib/ObjectSerializer.php | 17 +++++++++++++++-- .../tests/DateTimeSerializerTest.php | 5 +++++ .../OpenAPIClient-php/lib/ObjectSerializer.php | 17 +++++++++++++++-- .../tests/DateTimeSerializerTest.php | 5 +++++ 5 files changed, 55 insertions(+), 6 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache b/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache index f5f0e5119efc..99b992ed5dd4 100644 --- a/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache +++ b/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache @@ -31,6 +31,19 @@ use {{modelPackage}}\ModelInterface; */ class ObjectSerializer { + /** @var string */ + private static $dateTimeFormat = \DateTime::ATOM; + + /** + * Change the date format + * + * @param string $format the new date format to use + */ + public static function setDateTimeFormat($format) + { + self::$dateTimeFormat = $format; + } + /** * Serialize data * @@ -45,7 +58,7 @@ class ObjectSerializer if (is_scalar($data) || null === $data) { return $data; } elseif ($data instanceof \DateTime) { - return ($format === 'date') ? $data->format('Y-m-d') : $data->format(\DateTime::ATOM); + return ($format === 'date') ? $data->format('Y-m-d') : $data->format(self::$dateTimeFormat); } elseif (is_array($data)) { foreach ($data as $property => $value) { $data[$property] = self::sanitizeForSerialization($value); @@ -178,7 +191,7 @@ class ObjectSerializer public static function toString($value) { if ($value instanceof \DateTime) { // datetime in ISO8601 format - return $value->format(\DateTime::ATOM); + return $value->format(self::$dateTimeFormat); } else if (is_bool($value)) { return $value ? 'true' : 'false'; } else { diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php index cdae80a4e820..3569ce8ce4cc 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php @@ -41,6 +41,19 @@ use OpenAPI\Client\Model\ModelInterface; */ class ObjectSerializer { + /** @var string */ + private static $dateTimeFormat = \DateTime::ATOM; + + /** + * Change the date format + * + * @param string $format the new date format to use + */ + public static function setDateTimeFormat($format) + { + self::$dateTimeFormat = $format; + } + /** * Serialize data * @@ -55,7 +68,7 @@ class ObjectSerializer if (is_scalar($data) || null === $data) { return $data; } elseif ($data instanceof \DateTime) { - return ($format === 'date') ? $data->format('Y-m-d') : $data->format(\DateTime::ATOM); + return ($format === 'date') ? $data->format('Y-m-d') : $data->format(self::$dateTimeFormat); } elseif (is_array($data)) { foreach ($data as $property => $value) { $data[$property] = self::sanitizeForSerialization($value); @@ -188,7 +201,7 @@ class ObjectSerializer public static function toString($value) { if ($value instanceof \DateTime) { // datetime in ISO8601 format - return $value->format(\DateTime::ATOM); + return $value->format(self::$dateTimeFormat); } else if (is_bool($value)) { return $value ? 'true' : 'false'; } else { diff --git a/samples/client/petstore/php/OpenAPIClient-php/tests/DateTimeSerializerTest.php b/samples/client/petstore/php/OpenAPIClient-php/tests/DateTimeSerializerTest.php index 3a889cba6dae..ca0fc505d6d0 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/tests/DateTimeSerializerTest.php +++ b/samples/client/petstore/php/OpenAPIClient-php/tests/DateTimeSerializerTest.php @@ -18,6 +18,11 @@ class DateTimeSerializerTest extends TestCase $data = ObjectSerializer::sanitizeForSerialization($input); $this->assertEquals($data->dateTime, '1973-04-30T17:05:00+02:00'); + + ObjectSerializer::setDateTimeFormat(\DateTime::RFC3339_EXTENDED); + $dataFraction = ObjectSerializer::sanitizeForSerialization($input); + $this->assertEquals($dataFraction->dateTime, '1973-04-30T17:05:00.000+02:00'); + ObjectSerializer::setDateTimeFormat(\DateTime::ATOM); } public function testDateSanitazion() diff --git a/samples/openapi3/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php b/samples/openapi3/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php index cdae80a4e820..3569ce8ce4cc 100644 --- a/samples/openapi3/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php +++ b/samples/openapi3/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php @@ -41,6 +41,19 @@ use OpenAPI\Client\Model\ModelInterface; */ class ObjectSerializer { + /** @var string */ + private static $dateTimeFormat = \DateTime::ATOM; + + /** + * Change the date format + * + * @param string $format the new date format to use + */ + public static function setDateTimeFormat($format) + { + self::$dateTimeFormat = $format; + } + /** * Serialize data * @@ -55,7 +68,7 @@ class ObjectSerializer if (is_scalar($data) || null === $data) { return $data; } elseif ($data instanceof \DateTime) { - return ($format === 'date') ? $data->format('Y-m-d') : $data->format(\DateTime::ATOM); + return ($format === 'date') ? $data->format('Y-m-d') : $data->format(self::$dateTimeFormat); } elseif (is_array($data)) { foreach ($data as $property => $value) { $data[$property] = self::sanitizeForSerialization($value); @@ -188,7 +201,7 @@ class ObjectSerializer public static function toString($value) { if ($value instanceof \DateTime) { // datetime in ISO8601 format - return $value->format(\DateTime::ATOM); + return $value->format(self::$dateTimeFormat); } else if (is_bool($value)) { return $value ? 'true' : 'false'; } else { diff --git a/samples/openapi3/client/petstore/php/OpenAPIClient-php/tests/DateTimeSerializerTest.php b/samples/openapi3/client/petstore/php/OpenAPIClient-php/tests/DateTimeSerializerTest.php index 3a889cba6dae..ca0fc505d6d0 100644 --- a/samples/openapi3/client/petstore/php/OpenAPIClient-php/tests/DateTimeSerializerTest.php +++ b/samples/openapi3/client/petstore/php/OpenAPIClient-php/tests/DateTimeSerializerTest.php @@ -18,6 +18,11 @@ class DateTimeSerializerTest extends TestCase $data = ObjectSerializer::sanitizeForSerialization($input); $this->assertEquals($data->dateTime, '1973-04-30T17:05:00+02:00'); + + ObjectSerializer::setDateTimeFormat(\DateTime::RFC3339_EXTENDED); + $dataFraction = ObjectSerializer::sanitizeForSerialization($input); + $this->assertEquals($dataFraction->dateTime, '1973-04-30T17:05:00.000+02:00'); + ObjectSerializer::setDateTimeFormat(\DateTime::ATOM); } public function testDateSanitazion()