diff --git a/core/lib/Drupal/Component/Datetime/DateTimePlus.php b/core/lib/Drupal/Component/Datetime/DateTimePlus.php
index bb56ba545d..0e1837a232 100644
--- a/core/lib/Drupal/Component/Datetime/DateTimePlus.php
+++ b/core/lib/Drupal/Component/Datetime/DateTimePlus.php
@@ -695,6 +695,15 @@ public function format($format, $settings = []) {
         $dateTimeObject->setTimezone(new \DateTimeZone($settings['timezone']));
       }
       $value = $dateTimeObject->format($format);
+
+      // Provide hook_format_date_alter().
+      $context = $settings + [
+        'format' => $format,
+      ];
+
+      if (\Drupal::hasService('module_handler')) {
+        \Drupal::moduleHandler()->alter('format_date', $value, $context);
+      }
     }
     catch (\Exception $e) {
       $this->errors[] = $e->getMessage();
diff --git a/core/lib/Drupal/Core/Datetime/DateFormatter.php b/core/lib/Drupal/Core/Datetime/DateFormatter.php
index 7729080352..dc9aae9867 100644
--- a/core/lib/Drupal/Core/Datetime/DateFormatter.php
+++ b/core/lib/Drupal/Core/Datetime/DateFormatter.php
@@ -137,6 +137,9 @@ public function format($timestamp, $type = 'medium', $format = '', $timezone = N
 
     // Call $date->format().
     $settings = [
+      'timestamp' => $timestamp,
+      'type' => $type,
+      'timezone' => $timezone,
       'langcode' => $langcode,
     ];
     return $date->format($format, $settings);
