From 2fe69efea3e07b8ce599d284c9c653160496c384 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Fri, 1 Mar 2024 11:45:45 +0000
Subject: [PATCH] Issue #3414883 by paul121, acbramley, catch, smustgrave,
 quietone: [regression] datetime_timestamp widget does not use default field
 value

---
 .../FieldWidget/TimestampDatetimeWidget.php   |  3 +--
 .../Datetime/TimestampTest.php                | 19 +++++++++++++++++++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/core/lib/Drupal/Core/Datetime/Plugin/Field/FieldWidget/TimestampDatetimeWidget.php b/core/lib/Drupal/Core/Datetime/Plugin/Field/FieldWidget/TimestampDatetimeWidget.php
index af3fd0dcee21..88efd5efe46f 100644
--- a/core/lib/Drupal/Core/Datetime/Plugin/Field/FieldWidget/TimestampDatetimeWidget.php
+++ b/core/lib/Drupal/Core/Datetime/Plugin/Field/FieldWidget/TimestampDatetimeWidget.php
@@ -25,8 +25,7 @@ class TimestampDatetimeWidget extends WidgetBase {
    * {@inheritdoc}
    */
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
-    $parent_entity = $items->getParent()->getValue();
-    $default_value = (!$parent_entity->isNew() && isset($items[$delta]->value)) ? DrupalDateTime::createFromTimestamp($items[$delta]->value) : '';
+    $default_value = isset($items[$delta]->value) ? DrupalDateTime::createFromTimestamp($items[$delta]->value) : '';
     $element['value'] = $element + [
       '#type' => 'datetime',
       '#default_value' => $default_value,
diff --git a/core/tests/Drupal/FunctionalTests/Datetime/TimestampTest.php b/core/tests/Drupal/FunctionalTests/Datetime/TimestampTest.php
index a854f48de919..81383c79f57a 100644
--- a/core/tests/Drupal/FunctionalTests/Datetime/TimestampTest.php
+++ b/core/tests/Drupal/FunctionalTests/Datetime/TimestampTest.php
@@ -154,6 +154,25 @@ public function testWidget() {
     $medium = DateFormat::load('medium')->getPattern();
     $this->drupalGet('entity_test/' . $id);
     $this->assertSession()->pageTextContains($date->format($medium));
+
+    // Build up a date in the UTC timezone.
+    $value = '2024-01-16 00:00:00';
+    $date = new DrupalDateTime($value, 'UTC');
+
+    // Set a default value for the field.
+    $this->field->setDefaultValue($date->getTimestamp())->save();
+
+    // Update the timezone to the system default.
+    $date->setTimezone(timezone_open(date_default_timezone_get()));
+
+    $this->drupalGet('entity_test/add');
+    $date_format = DateFormat::load('html_date')->getPattern();
+    $time_format = DateFormat::load('html_time')->getPattern();
+    // Make sure the default field value is set as the default value in the widget.
+    $this->assertSession()->fieldExists('field_timestamp[0][value][date]');
+    $this->assertSession()->fieldValueEquals('field_timestamp[0][value][date]', $date->format($date_format));
+    $this->assertSession()->fieldExists('field_timestamp[0][value][time]');
+    $this->assertSession()->fieldValueEquals('field_timestamp[0][value][time]', $date->format($time_format));
   }
 
 }
-- 
GitLab