diff --git a/Civi/DataProcessor/Factory.php b/Civi/DataProcessor/Factory.php
index d71aee2d54e9bf2f2826443fd8c9e986165fea49..8210c67d3cba368557db6ed2333dd08c850e664f 100644
--- a/Civi/DataProcessor/Factory.php
+++ b/Civi/DataProcessor/Factory.php
@@ -198,6 +198,7 @@ class Factory {
     $this->addOutputHandler('date', new Definition('Civi\DataProcessor\FieldOutputHandler\DateFieldOutputHandler'), E::ts('Date field value'));
     $this->addOutputHandler('date_month_segment', new Definition('Civi\DataProcessor\FieldOutputHandler\DateMonthSegmentFieldOutputHandler'), E::ts('Segment text based on a date field (Per Month)'));
     $this->addOutputHandler('date_range', new Definition('Civi\DataProcessor\FieldOutputHandler\DateRangeFieldOutputHandler'), E::ts('Date range value (with additional end date)'));
+    $this->addOutputHandler('date_range_end_midnight', new Definition('Civi\DataProcessor\FieldOutputHandler\DateRangeEndMidnightFieldOutputHandler'), E::ts('Date range end midnight'));
     $this->addOutputHandler('age', new Definition('Civi\DataProcessor\FieldOutputHandler\AgeFieldOutputHandler'), E::ts('Age field value'));
     $this->addOutputHandler('contact_has_relationship', new Definition('Civi\DataProcessor\FieldOutputHandler\ContactHasRelationshipFieldOutputHandler'), E::ts('Contact has relationship'));
     $this->addOutputHandler('contact_link', new Definition('Civi\DataProcessor\FieldOutputHandler\ContactLinkFieldOutputHandler'), E::ts('Link to view contact'));
diff --git a/Civi/DataProcessor/FieldOutputHandler/DateRangeEndMidnightFieldOutputHandler.php b/Civi/DataProcessor/FieldOutputHandler/DateRangeEndMidnightFieldOutputHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..e927cd570826b1a748cb6f1425689ac85768a7c7
--- /dev/null
+++ b/Civi/DataProcessor/FieldOutputHandler/DateRangeEndMidnightFieldOutputHandler.php
@@ -0,0 +1,153 @@
+<?php
+/**
+ * @author Gerhard Weber <gerhard.weber@civiservice.de>
+ * @license AGPL-3.0
+ */
+
+namespace Civi\DataProcessor\FieldOutputHandler;
+
+use CRM_Dataprocessor_ExtensionUtil as E;
+use Civi\DataProcessor\Source\SourceInterface;
+use Civi\DataProcessor\DataSpecification\FieldSpecification;
+
+class DateRangeEndMidnightFieldOutputHandler extends DateFieldOutputHandler {
+
+  /**
+   * Field for end date.
+   *
+   * @var FieldSpecification
+   */
+  protected $dateStart;
+
+  /**
+   * Source for end date.
+   *
+   * @var SourceInterface
+   */
+  protected $dataSourceDateStart;
+
+  /**
+   * Additional optional format used if time is not set (default time '00:00:00').
+   */
+  protected $formatTime = NULL;
+
+  /**
+   * Initialize the processor
+   *
+   * @param String $alias
+   * @param String $title
+   * @param array $configuration
+   */
+  public function initialize($alias, $title, $configuration) {
+    parent::initialize($alias, $title, $configuration);
+
+    [$this->dataSourceDateStart, $this->dateStart] = $this->initializeField($configuration['date_start'], $configuration['date_start_datasource'], $alias . '_date_end');
+    $this->formatTime = isset($configuration['format_time']) ? $configuration['format_time'] : false;
+  }
+
+  /**
+   * Add additional configuration for start date and time format.
+   *
+   * @param \CRM_Core_Form $form
+   * @param array $field
+   */
+  public function buildConfigurationForm(\CRM_Core_Form $form, $field=array()) {
+    parent::buildConfigurationForm($form, $field);
+
+    // @nice-to-have get directly from form's first datasource?
+    $fieldSelect = \CRM_Dataprocessor_Utils_DataSourceFields::getAvailableFieldsInDataSources($field['data_processor_id'],
+      array($this, 'isFieldValid')
+    );
+    $form->add('select', 'date_start', E::ts('Start date'), $fieldSelect, true, array(
+      'style' => 'min-width:250px',
+      'class' => 'crm-select2 huge data-processor-field-for-name',
+      'placeholder' => E::ts('- select -'),
+    ));
+
+    $form->add('text', 'format_time', E::ts('Time format'), array(
+      'style' => 'min-width:250px',
+      'class' => 'huge',
+    ));
+
+    if (isset($field['configuration'])) {
+      $configuration = $field['configuration'];
+      $defaults = array();
+
+      if (isset($configuration['date_start']) && isset($configuration['date_start_datasource'])) {
+        $defaults['date_start'] = \CRM_Dataprocessor_Utils_DataSourceFields::getSelectedFieldValue($field['data_processor_id'],
+          $configuration['date_start_datasource'], $configuration['date_start']);
+      }
+
+      if (isset($configuration['format_time'])) {
+        $defaults['format_time'] = $configuration['format_time'];
+      }
+
+      $form->setDefaults($defaults);
+    }
+
+  }
+
+  /**
+   * Returns template file name for the configuration form.
+   *
+   * @return false|string
+   */
+  public function getConfigurationTemplateFileName() {
+    return "CRM/Dataprocessor/Form/Field/Configuration/DateRangeEndMidnightFieldOutputHandler.tpl";
+  }
+
+  /**
+   * Process the submitted values and create a configuration array
+   *
+   * @param $submittedValues
+   * @return array
+   */
+  public function processConfiguration($submittedValues) {
+    $configuration = parent::processConfiguration($submittedValues);
+
+    [$datasource, $field] = explode('::', $submittedValues['date_start'], 2);
+    $configuration['date_start'] = $field;
+    $configuration['date_start_datasource'] = $datasource;
+
+    $configuration['format_time'] = isset($submittedValues['format_time']) ? $submittedValues['format_time'] : false;
+
+    return $configuration;
+  }
+
+  /**
+   * Returns the formatted value.
+   *
+   * @param $rawRecord
+   * @param $formattedRecord
+   *
+   * @return \Civi\DataProcessor\FieldOutputHandler\FieldOutput
+   */
+  public function formatField($rawRecord, $formattedRecord) {
+    // Get formated end date part (same as parent function but format should not include time formatting!)
+    $rawValue = $rawRecord[$this->inputFieldSpec->alias];
+    $output = new FieldOutput($rawRecord[$this->inputFieldSpec->alias]);
+    if ($this->format && $rawValue) {
+      $date = new \DateTime($rawValue);
+      $format = $this->format;
+
+      // Add time part.
+      if ($this->formatTime) {
+        $format .= ' ' . $this->formatTime;
+
+        if (str_ends_with($rawValue, ' 23:59:00')) {
+          // End date has time 23:59, so we are checking the start date.
+          $rawValue2 = $rawRecord[$this->dateStart->alias];
+          if (str_ends_with($rawValue2, ' 00:00:00')) {
+            // Start date has time 00:00, so we will use time 00:00 for the formatting.
+            $date->setTime(0, 0);
+          }
+        }
+      }
+
+      $output->formattedValue = $date->format($format);
+    }
+
+    return $output;
+  }
+
+}
diff --git a/templates/CRM/Dataprocessor/Form/Field/Configuration/DateRangeEndMidnightFieldOutputHandler.tpl b/templates/CRM/Dataprocessor/Form/Field/Configuration/DateRangeEndMidnightFieldOutputHandler.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..b195153baab9b0e8138fc7d42817e186cddf2ae8
--- /dev/null
+++ b/templates/CRM/Dataprocessor/Form/Field/Configuration/DateRangeEndMidnightFieldOutputHandler.tpl
@@ -0,0 +1,30 @@
+{crmScope extensionKey='dataprocessor'}
+  {include file="CRM/Dataprocessor/Form/Field/Configuration/DateFieldOutputHandler.tpl"}
+
+  <hr >
+  <div class="crm-section">
+    <div class="label">{$form.date_start.label}</div>
+    <div class="content">
+      {$form.date_start.html}
+      <p class="description">
+        {ts}If start has default time <em>00:00:00</em> and end has time <em>23:59:00</em> output will be formatted with above date format and time format below, e.g. <em>1973-11-29 00:00</em>.{/ts}
+        <br>
+        {ts}Otherwise output will be formatted with above date format and time format below.{/ts}
+        <br>
+        {ts}Do not include time formating in above date format.{/ts}
+      </p>
+    </div>
+    <div class="clear"></div>
+  </div>
+  <div class="crm-section">
+    <div class="label">{$form.format_time.label}</div>
+    <div class="content">
+      {$form.format_time.html}
+      <p class="description">
+        {ts}Time format (e.g. <em>H:i</em>). Do not include date formating.{/ts}<br />
+        {ts 1='https://www.php.net/manual/en/datetime.format.php#refsect1-datetime.format-parameters'}See <a href="%1" target="_blank">DateTime format on php.net</a> for help.{/ts}
+      </p>
+    </div>
+    <div class="clear"></div>
+  </div>
+{/crmScope}