diff --git a/core/modules/datetime/datetime.module b/core/modules/datetime/datetime.module index 1078541..522725e 100644 --- a/core/modules/datetime/datetime.module +++ b/core/modules/datetime/datetime.module @@ -50,6 +50,9 @@ function datetime_help($route_name, RouteMatchInterface $route_match) { * same value for in both the local timezone and UTC. * * @param $date + * + * @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Use + * (TBD) instead. */ function datetime_date_default_time($date) { $date->setTime(12, 0, 0); diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeCustomFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeCustomFormatter.php index 678ddc8..a2ef7d5 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeCustomFormatter.php +++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeCustomFormatter.php @@ -40,10 +40,6 @@ public function viewElements(FieldItemListInterface $items, $langcode) { /** @var \Drupal\Core\Datetime\DrupalDateTime $date */ $date = $item->date; - if ($this->getFieldSetting('datetime_type') == 'date') { - // A date without time will pick up the current time, use the default. - datetime_date_default_time($date); - } $this->setTimeZone($date); $output = $this->formatDate($date); diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php index 03c92ae..e0fe538 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php +++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php @@ -42,11 +42,6 @@ public function viewElements(FieldItemListInterface $items, $langcode) { /** @var \Drupal\Core\Datetime\DrupalDateTime $date */ $date = $item->date; - if ($this->getFieldSetting('datetime_type') == 'date') { - // A date without time will pick up the current time, use the default. - datetime_date_default_time($date); - } - // Create the ISO date in Universal Time. $iso_date = $date->format("Y-m-d\TH:i:s") . 'Z'; diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimePlainFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimePlainFormatter.php index 683d75c..a8ff469 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimePlainFormatter.php +++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimePlainFormatter.php @@ -30,10 +30,6 @@ public function viewElements(FieldItemListInterface $items, $langcode) { /** @var \Drupal\Core\Datetime\DrupalDateTime $date */ $date = $item->date; - if ($this->getFieldSetting('datetime_type') == 'date') { - // A date without time will pick up the current time, use the default. - datetime_date_default_time($date); - } $this->setTimeZone($date); $output = $this->formatDate($date); diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeTimeAgoFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeTimeAgoFormatter.php index 859ea5d..e79a94a 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeTimeAgoFormatter.php +++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeTimeAgoFormatter.php @@ -110,10 +110,6 @@ public function viewElements(FieldItemListInterface $items, $langcode) { $date = $item->date; $output = []; if (!empty($item->date)) { - if ($this->getFieldSetting('datetime_type') == 'date') { - // A date without time will pick up the current time, use the default. - datetime_date_default_time($date); - } $output = $this->formatDate($date); } $elements[$delta] = $output; diff --git a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php index aa6175a..1ea8241 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php +++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php @@ -44,13 +44,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen $date = $items[$delta]->date; // The date was created and verified during field_load(), so it is safe to // use without further inspection. - if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) { - // A date without time will pick up the current time, use the default - // time. - datetime_date_default_time($date); - } - $date->setTimezone(new \DateTimeZone($element['value']['#date_timezone'])); - $element['value']['#default_value'] = $date; + $element['value']['#default_value'] = $this->createDefaultValue($date, $element['value']['#date_timezone']); } return $element; @@ -68,9 +62,6 @@ public function massageFormValues(array $values, array $form, FormStateInterface $date = $item['value']; switch ($this->getFieldSetting('datetime_type')) { case DateTimeItem::DATETIME_TYPE_DATE: - // If this is a date-only field, set it to the default time so the - // timezone conversion can be reversed. - datetime_date_default_time($date); $format = DATETIME_DATE_STORAGE_FORMAT; break; @@ -86,4 +77,26 @@ public function massageFormValues(array $values, array $form, FormStateInterface return $values; } + /** + * Creates a date object for use as a default value. + * + * This will take a default value, apply the proper timezone for display in + * a widget, and set the default time for date-only fields. + * + * @param \Drupal\Core\Datetime\DrupalDateTime $date + * The UTC default date. + * @param string $timezone + * The timezone to apply. + * + * @return \Drupal\Core\Datetime\DrupalDateTime + * A date object for use as a default value in a field widget. + */ + protected function createDefaultValue($date, $timezone) { + // The date was created and verified during field_load(), so it is safe to + // use without further inspection. + $date->setTime(12, 0, 0); + $date->setTimezone(new \DateTimeZone($timezone)); + return $date; + } + } diff --git a/core/modules/datetime/src/Tests/DateTestBase.php b/core/modules/datetime/src/Tests/DateTestBase.php index 0f1277e..d24ca9f 100644 --- a/core/modules/datetime/src/Tests/DateTestBase.php +++ b/core/modules/datetime/src/Tests/DateTestBase.php @@ -3,6 +3,7 @@ namespace Drupal\datetime\Tests; use Drupal\Component\Utility\Unicode; +use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Entity\Entity\EntityFormDisplay; use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\datetime_range\Plugin\Field\FieldType\DateRangeItem; @@ -179,4 +180,19 @@ protected function setSiteTimezone($timezone) { ->save(); } + /** + * Massages test date values. + * + * If a date object is generated directly by a test, then it needs to be + * adjusted to behave like the computed date from the item. + * + * @param \Drupal\Core\Datetime\DrupalDateTime $date + * A date object directly generated by the test. + */ + protected function massageTestDate($date) { + // Mirror what \Drupal\datetime\DateTimeComputed::getValue() does to + // date-only items. + $date->setTime(12, 0, 0); + } + } diff --git a/core/modules/datetime/src/Tests/DateTimeFieldTest.php b/core/modules/datetime/src/Tests/DateTimeFieldTest.php index f7aeae8..7da5566 100644 --- a/core/modules/datetime/src/Tests/DateTimeFieldTest.php +++ b/core/modules/datetime/src/Tests/DateTimeFieldTest.php @@ -96,7 +96,7 @@ function testDateField() { // Formats that display a time component for date-only fields will display // the default time, so that is applied before calculating the expected // value. - datetime_date_default_time($date); + $this->massageTestDate($date); foreach ($options as $setting => $values) { foreach ($values as $new_value) { // Update the entity display settings. diff --git a/core/modules/datetime_range/src/DateTimeRangeTrait.php b/core/modules/datetime_range/src/DateTimeRangeTrait.php index 5a34f2c..69df5cc 100644 --- a/core/modules/datetime_range/src/DateTimeRangeTrait.php +++ b/core/modules/datetime_range/src/DateTimeRangeTrait.php @@ -20,10 +20,6 @@ * A render array. */ protected function buildDate(DrupalDateTime $date) { - if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) { - // A date without time will pick up the current time, use the default. - datetime_date_default_time($date); - } $this->setTimeZone($date); $build = [ @@ -48,11 +44,6 @@ protected function buildDate(DrupalDateTime $date) { * A render array. */ protected function buildDateWithIsoAttribute(DrupalDateTime $date) { - if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) { - // A date without time will pick up the current time, use the default. - datetime_date_default_time($date); - } - // Create the ISO date in Universal Time. $iso_date = $date->format("Y-m-d\TH:i:s") . 'Z'; diff --git a/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php b/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php index 87cecbb..5c8e271 100644 --- a/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php +++ b/core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php @@ -54,9 +54,6 @@ public function massageFormValues(array $values, array $form, FormStateInterface $start_date = $item['value']; switch ($this->getFieldSetting('datetime_type')) { case DateRangeItem::DATETIME_TYPE_DATE: - // If this is a date-only field, set it to the default time so the - // timezone conversion can be reversed. - datetime_date_default_time($start_date); $format = DATETIME_DATE_STORAGE_FORMAT; break; @@ -84,9 +81,6 @@ public function massageFormValues(array $values, array $form, FormStateInterface $end_date = $item['end_value']; switch ($this->getFieldSetting('datetime_type')) { case DateRangeItem::DATETIME_TYPE_DATE: - // If this is a date-only field, set it to the default time so the - // timezone conversion can be reversed. - datetime_date_default_time($end_date); $format = DATETIME_DATE_STORAGE_FORMAT; break; @@ -138,30 +132,4 @@ public function validateStartEnd(array &$element, FormStateInterface $form_state } } - /** - * Creates a date object for use as a default value. - * - * This will take a default value, apply the proper timezone for display in - * a widget, and set the default time for date-only fields. - * - * @param \Drupal\Core\Datetime\DrupalDateTime $date - * The UTC default date. - * @param string $timezone - * The timezone to apply. - * - * @return \Drupal\Core\Datetime\DrupalDateTime - * A date object for use as a default value in a field widget. - */ - protected function createDefaultValue($date, $timezone) { - // The date was created and verified during field_load(), so it is safe to - // use without further inspection. - if ($this->getFieldSetting('datetime_type') == DateTimeItem::DATETIME_TYPE_DATE) { - // A date without time will pick up the current time, use the default - // time. - datetime_date_default_time($date); - } - $date->setTimezone(new \DateTimeZone($timezone)); - return $date; - } - } diff --git a/core/modules/datetime_range/src/Tests/DateRangeFieldTest.php b/core/modules/datetime_range/src/Tests/DateRangeFieldTest.php index 759352e..e5839f1 100644 --- a/core/modules/datetime_range/src/Tests/DateRangeFieldTest.php +++ b/core/modules/datetime_range/src/Tests/DateRangeFieldTest.php @@ -105,8 +105,8 @@ public function testDateRangeField() { // Formats that display a time component for date-only fields will display // the default time, so that is applied before calculating the expected // value. - datetime_date_default_time($start_date); - datetime_date_default_time($end_date); + $this->massageTestDate($start_date); + $this->massageTestDate($end_date); // Reset display options since these get changed below. $this->displayOptions = [ @@ -183,7 +183,7 @@ public function testDateRangeField() { $id = $match[1]; $this->assertText(t('entity_test @id has been created.', array('@id' => $id))); - datetime_date_default_time($start_date); + $this->massageTestDate($start_date); $this->displayOptions = [ 'type' => 'daterange_default',