.../Normalizer/DateTimeIso8601Normalizer.php | 7 ++++++- .../Normalizer/DateTimeNormalizer.php | 18 +++++------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/ForwardCompatibility/Normalizer/DateTimeIso8601Normalizer.php b/src/ForwardCompatibility/Normalizer/DateTimeIso8601Normalizer.php index 6fde623..ac07bb9 100644 --- a/src/ForwardCompatibility/Normalizer/DateTimeIso8601Normalizer.php +++ b/src/ForwardCompatibility/Normalizer/DateTimeIso8601Normalizer.php @@ -2,6 +2,7 @@ namespace Drupal\jsonapi\ForwardCompatibility\Normalizer; +use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\TypedData\Plugin\DataType\DateTimeIso8601; use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem; @@ -37,7 +38,11 @@ class DateTimeIso8601Normalizer extends DateTimeNormalizer { public function normalize($datetime, $format = NULL, array $context = []) { $field_item = $datetime->getParent(); if ($field_item instanceof DateTimeItem && $field_item->getFieldDefinition()->getFieldStorageDefinition()->getSetting('datetime_type') === DateTimeItem::DATETIME_TYPE_DATE) { - return $this->getDateTime($datetime)->format($this->allowedFormats['date-only']); + // @todo Remove when JSON:API only supports Drupal >=8.7, which fixed this in https://www.drupal.org/project/drupal/issues/3002164. + $drupal_date_time = floatval(floatval(\Drupal::VERSION) >= 8.7) + ? $datetime->getDateTime() + : new DrupalDateTime($datetime->getValue(), 'UTC'); + return $drupal_date_time->format($this->allowedFormats['date-only']); } return parent::normalize($datetime, $format, $context); } diff --git a/src/ForwardCompatibility/Normalizer/DateTimeNormalizer.php b/src/ForwardCompatibility/Normalizer/DateTimeNormalizer.php index fa4dd09..12e4911 100644 --- a/src/ForwardCompatibility/Normalizer/DateTimeNormalizer.php +++ b/src/ForwardCompatibility/Normalizer/DateTimeNormalizer.php @@ -41,7 +41,11 @@ class DateTimeNormalizer extends NormalizerBase implements DenormalizerInterface * {@inheritdoc} */ public function normalize($datetime, $format = NULL, array $context = []) { - return $this->getDateTime($datetime) + // @todo Remove when JSON:API only supports Drupal >=8.7, which fixed this in https://www.drupal.org/project/drupal/issues/3002164. + $drupal_date_time = floatval(floatval(\Drupal::VERSION) >= 8.7) + ? $datetime->getDateTime() + : new DrupalDateTime($datetime->getValue(), 'UTC'); + return $drupal_date_time // Set an explicit timezone. Otherwise, timestamps may end up being // normalized using the user's preferred timezone. Which would result in // many variations and complex caching. @@ -52,18 +56,6 @@ class DateTimeNormalizer extends NormalizerBase implements DenormalizerInterface } /** - * Returns the date time object after observing source timezone is UTC. - * - * @see \Drupal\Core\TypedData\Plugin\DataType\DateTimeIso8601::getDateTime() - * - * @return \Drupal\Core\Datetime\DrupalDateTime - * A date object. - */ - protected function getDateTime($datetime) { - return new DrupalDateTime($datetime->getValue(), 'UTC'); - } - - /** * Gets the timezone to be used during normalization. * * @see ::normalize