diff --git a/core/lib/Drupal/Core/Datetime/Element/Datetime.php b/core/lib/Drupal/Core/Datetime/Element/Datetime.php index eaf9df1..51a2b08 100644 --- a/core/lib/Drupal/Core/Datetime/Element/Datetime.php +++ b/core/lib/Drupal/Core/Datetime/Element/Datetime.php @@ -97,6 +97,7 @@ public static function valueCallback(&$element, $input, FormStateInterface $form $input = array( 'date' => $date_input, 'time' => $time_input, + 'timezone' => $timezone, 'object' => $date, ); } diff --git a/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php index 1727fd3..5fa252b 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php +++ b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php @@ -103,7 +103,8 @@ public static function schema(FieldStorageDefinitionInterface $field_definition) ), ), 'indexes' => array( - 'value' => array('value', 'timezone'), + 'value' => array('value'), + 'value_timezone' => array('value', 'timezone'), ), ); @@ -132,10 +133,10 @@ public function storageSettingsForm(array &$form, FormStateInterface $form_state '#type' => 'select', '#title' => t('Timezone handling'), '#options' => array( - static::TIMEZONE_SITE => t("Site's timezone"), - static::TIMEZONE_DATE => t("Date's timezone"), - static::TIMEZONE_USER => t("User's timezone"), - static::TIMEZONE_NONE => t('No timezone conversion'), + static::TIMEZONE_SITE => $this->t("Site's timezone"), + static::TIMEZONE_DATE => $this->t("Date's timezone"), + static::TIMEZONE_USER => $this->t("User's timezone"), + static::TIMEZONE_NONE => $this->t('No timezone conversion'), ), '#default_value' => $this->getSetting('timezone_handling'), '#required' => TRUE, diff --git a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php index f2b217f0..65326f2 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php +++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php @@ -56,7 +56,6 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen } $date->setTimezone(new \DateTimeZone($element['value']['#date_timezone'])); $element['value']['#default_value'] = $date; - $element['timezone']['#default_value'] = $date->format('e'); } return $element; @@ -93,8 +92,11 @@ public function massageFormValues(array $values, array $form, FormStateInterface $item['timezone'] = ''; } - // Adjust the date for storage. - $date->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE)); + // Adjust the date for storage once validation is complete. + if ($form_state->isValidationComplete()) { + $date->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE)); + } + $item['value'] = $date->format($format); } } diff --git a/core/modules/datetime/src/Tests/DateTimeFieldTest.php b/core/modules/datetime/src/Tests/DateTimeFieldTest.php index 19868d6..b7984f1 100644 --- a/core/modules/datetime/src/Tests/DateTimeFieldTest.php +++ b/core/modules/datetime/src/Tests/DateTimeFieldTest.php @@ -431,8 +431,8 @@ function testDatetimeField() { $this->fieldStorage->save(); $edit = array( - "{$field_name}[0][value][date]" => $date->format($date_format), - "{$field_name}[0][value][time]" => $date->format($time_format), + "{$field_name}[0][value][date]" => $date->format($date_format, ['timezone' => 'America/New_York']), + "{$field_name}[0][value][time]" => $date->format($time_format, ['timezone' => 'America/New_York']), "{$field_name}[0][value][timezone]" => 'America/New_York', ); $this->drupalPostForm('entity_test/add', $edit, t('Save'));