getSetting('date source')) { throw new \InvalidArgumentException("The definition's 'date source' key has to specify the name of the date property to be computed."); } } /** * {@inheritdoc} */ public function getValue($langcode = NULL) { if ($this->date !== NULL) { return $this->date; } $item = $this->getParent(); $value = $item->{($this->definition->getSetting('date source'))}; $storage_format = $item->getFieldDefinition()->getSetting('datetime_type') == 'date' ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT; try { $date = DrupalDateTime::createFromFormat($storage_format, $value, DATETIME_STORAGE_TIMEZONE); if ($date instanceof DrupalDateTime && !$date->hasErrors()) { $this->date = $date; } } catch (\Exception $e) { // @todo Handle this. } return $this->date; } /** * {@inheritdoc} */ public function setValue($value, $notify = TRUE) { $this->date = $value; // Notify the parent of any changes. if ($notify && isset($this->parent)) { $this->parent->onChange($this->name); } } }