function DateTimeComputed::getValue

Same name and namespace in other branches
  1. 9 core/modules/datetime/src/DateTimeComputed.php \Drupal\datetime\DateTimeComputed::getValue()
  2. 8.9.x core/modules/datetime/src/DateTimeComputed.php \Drupal\datetime\DateTimeComputed::getValue()
  3. 10 core/modules/datetime/src/DateTimeComputed.php \Drupal\datetime\DateTimeComputed::getValue()

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')};
    // A date cannot be created from a NULL value.
    if ($value === NULL) {
        return NULL;
    }
    $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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.