You are here

public function DateTimeComputed::getValue in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/datetime/src/DateTimeComputed.php \Drupal\datetime\DateTimeComputed::getValue()

Gets the data value.

Return value

mixed The data value.

Overrides TypedData::getValue

File

core/modules/datetime/src/DateTimeComputed.php, line 40

Class

DateTimeComputed
A computed property for dates of date time field items.

Namespace

Drupal\datetime

Code

public function getValue() {
  if ($this->date !== NULL) {
    return $this->date;
  }

  /** @var \Drupal\Core\Field\FieldItemInterface $item */
  $item = $this
    ->getParent();
  $value = $item->{$this->definition
    ->getSetting('date source')};
  $datetime_type = $item
    ->getFieldDefinition()
    ->getSetting('datetime_type');
  $storage_format = $datetime_type === DateTimeItem::DATETIME_TYPE_DATE ? DateTimeItemInterface::DATE_STORAGE_FORMAT : DateTimeItemInterface::DATETIME_STORAGE_FORMAT;
  try {
    $date = DrupalDateTime::createFromFormat($storage_format, $value, DateTimeItemInterface::STORAGE_TIMEZONE);
    if ($date instanceof DrupalDateTime && !$date
      ->hasErrors()) {
      $this->date = $date;

      // If the format did not include an explicit time portion, then the
      // time will be set from the current time instead. For consistency, we
      // set the time to 12:00:00 UTC for date-only fields. This is used so
      // that the local date portion is the same, across nearly all time
      // zones.
      // @see \Drupal\Component\Datetime\DateTimePlus::setDefaultDateTime()
      // @see http://php.net/manual/datetime.createfromformat.php
      if ($datetime_type === DateTimeItem::DATETIME_TYPE_DATE) {
        $this->date
          ->setDefaultDateTime();
      }
    }
  } catch (\Exception $e) {

    // @todo Handle this.
  }
  return $this->date;
}