function FormatDate::transform
Same name in other branches
- 9 core/modules/migrate/src/Plugin/migrate/process/FormatDate.php \Drupal\migrate\Plugin\migrate\process\FormatDate::transform()
- 8.9.x core/modules/migrate/src/Plugin/migrate/process/FormatDate.php \Drupal\migrate\Plugin\migrate\process\FormatDate::transform()
- 11.x core/modules/migrate/src/Plugin/migrate/process/FormatDate.php \Drupal\migrate\Plugin\migrate\process\FormatDate::transform()
Overrides ProcessPluginBase::transform
File
-
core/
modules/ migrate/ src/ Plugin/ migrate/ process/ FormatDate.php, line 96
Class
- FormatDate
- Converts date/datetime from one format to another.
Namespace
Drupal\migrate\Plugin\migrate\processCode
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
if (empty($value) && $value !== '0' && $value !== 0) {
return '';
}
// Validate the configuration.
if (empty($this->configuration['from_format'])) {
throw new MigrateException('Format date plugin is missing from_format configuration.');
}
if (empty($this->configuration['to_format'])) {
throw new MigrateException('Format date plugin is missing to_format configuration.');
}
$fromFormat = $this->configuration['from_format'];
$toFormat = $this->configuration['to_format'];
$system_timezone = date_default_timezone_get();
$default_timezone = !empty($system_timezone) ? $system_timezone : 'UTC';
$from_timezone = $this->configuration['from_timezone'] ?? $default_timezone;
$to_timezone = $this->configuration['to_timezone'] ?? $default_timezone;
$settings = $this->configuration['settings'] ?? [];
// Older versions of Drupal where omitting certain granularity values (also
// known as "collected date attributes") resulted in invalid timestamps
// getting stored.
if ($fromFormat === 'Y-m-d\\TH:i:s') {
$value = str_replace([
'-00-00T',
'-00T',
], [
'-01-01T',
'-01T',
], $value);
}
// Attempts to transform the supplied date using the defined input format.
// DateTimePlus::createFromFormat can throw exceptions, so we need to
// explicitly check for problems.
try {
$transformed = DateTimePlus::createFromFormat($fromFormat, $value, $from_timezone, $settings)->format($toFormat, [
'timezone' => $to_timezone,
]);
} catch (\InvalidArgumentException $e) {
throw new MigrateException(sprintf("Format date plugin could not transform '%s' using the format '%s'. Error: %s", $value, $fromFormat, $e->getMessage()), $e->getCode(), $e);
} catch (\UnexpectedValueException $e) {
throw new MigrateException(sprintf("Format date plugin could not transform '%s' using the format '%s'. Error: %s", $value, $fromFormat, $e->getMessage()), $e->getCode(), $e);
}
return $transformed;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.