diff --git a/src/Entity/EventSeries.php b/src/Entity/EventSeries.php
index 3ccecd3987d7c43609a6ca266dbc6a97d7176d3e..7fb9619cc89499cfc67052a7e2ae3a7bcc29610e 100644
--- a/src/Entity/EventSeries.php
+++ b/src/Entity/EventSeries.php
@@ -471,7 +471,7 @@ class EventSeries extends EditorialContentEntityBase implements EventInterface {
    *   The date object for the weekly start date.
    */
   public function getWeeklyStartDate() {
-    return $this->get('weekly_recurring_date')->start_date;
+    return $this->get('weekly_recurring_date')->start_date->setTime(0, 0, 0);
   }
 
   /**
@@ -481,7 +481,7 @@ class EventSeries extends EditorialContentEntityBase implements EventInterface {
    *   The date object for the weekly end date.
    */
   public function getWeeklyEndDate() {
-    return $this->get('weekly_recurring_date')->end_date;
+    return $this->get('weekly_recurring_date')->end_date->setTime(0, 0, 0);
   }
 
   /**
@@ -525,7 +525,7 @@ class EventSeries extends EditorialContentEntityBase implements EventInterface {
    *   The date object for the monthly start date.
    */
   public function getMonthlyStartDate() {
-    return $this->get('monthly_recurring_date')->start_date;
+    return $this->get('monthly_recurring_date')->start_date->setTime(0, 0, 0);
   }
 
   /**
@@ -535,7 +535,7 @@ class EventSeries extends EditorialContentEntityBase implements EventInterface {
    *   The date object for the monthly end date.
    */
   public function getMonthlyEndDate() {
-    return $this->get('monthly_recurring_date')->end_date;
+    return $this->get('monthly_recurring_date')->end_date->setTime(0, 0, 0);
   }
 
   /**
diff --git a/src/EventCreationService.php b/src/EventCreationService.php
index b8fbf40c3050319782acc2d7e986d1c1a9f94300..adc4013a60e03904858390d1b17fc6e1dbca93c0 100644
--- a/src/EventCreationService.php
+++ b/src/EventCreationService.php
@@ -140,7 +140,7 @@ class EventCreationService {
   public function convertFormConfigToArray(FormStateInterface $form_state) {
     $config = [];
 
-    $date_timezone = new \DateTimeZone(drupal_get_user_timezone());
+    $user_timezone = new \DateTimeZone(drupal_get_user_timezone());
     $utc_timezone = new \DateTimeZone(DATETIME_STORAGE_TIMEZONE);
     $user_input = $form_state->getUserInput();
 
@@ -148,11 +148,13 @@ class EventCreationService {
 
     switch ($config['type']) {
       case 'weekly':
-        $start_timestamp = $user_input['weekly_recurring_date'][0]['value']['date'] . 'T00:00:00';
+        $start_timestamp = $user_input['weekly_recurring_date'][0]['value']['date'] . 'T12:00:00';
         $start_date = DrupalDateTime::createFromFormat(DATETIME_DATETIME_STORAGE_FORMAT, $start_timestamp, $utc_timezone);
+        $start_date->setTime(0, 0, 0);
 
-        $end_timestamp = $user_input['weekly_recurring_date'][0]['end_value']['date'] . 'T00:00:00';
+        $end_timestamp = $user_input['weekly_recurring_date'][0]['end_value']['date'] . 'T12:00:00';
         $end_date = DrupalDateTime::createFromFormat(DATETIME_DATETIME_STORAGE_FORMAT, $end_timestamp, $utc_timezone);
+        $end_date->setTime(0, 0, 0);
 
         $config['start_date'] = $start_date;
         $config['end_date'] = $end_date;
@@ -163,11 +165,13 @@ class EventCreationService {
         break;
 
       case 'monthly':
-        $start_timestamp = $user_input['weekly_recurring_date'][0]['value']['date'] . 'T00:00:00';
+        $start_timestamp = $user_input['weekly_recurring_date'][0]['value']['date'] . 'T12:00:00';
         $start_date = DrupalDateTime::createFromFormat(DATETIME_DATETIME_STORAGE_FORMAT, $start_timestamp, $utc_timezone);
+        $start_date->setTime(0, 0, 0);
 
-        $end_timestamp = $user_input['weekly_recurring_date'][0]['end_value']['date'] . 'T00:00:00';
+        $end_timestamp = $user_input['weekly_recurring_date'][0]['end_value']['date'] . 'T12:00:00';
         $end_date = DrupalDateTime::createFromFormat(DATETIME_DATETIME_STORAGE_FORMAT, $end_timestamp, $utc_timezone);
+        $end_date->setTime(0, 0, 0);
 
         $config['start_date'] = $start_date;
         $config['end_date'] = $end_date;
@@ -191,21 +195,25 @@ class EventCreationService {
       case 'custom':
         foreach ($user_input['custom_date'] as $custom_date) {
           $start_date = $end_date = NULL;
-
-          $start_timestamp = implode('T', $custom_date['value']);
-          $start_date = DrupalDateTime::createFromFormat(DATETIME_DATETIME_STORAGE_FORMAT, $start_timestamp, $date_timezone);
-          // Convert the DateTime object back to UTC timezone.
-          $start_date->setTimezone($utc_timezone);
-
-          $end_timestamp = implode('T', $custom_date['end_value']);
-          $end_date = DrupalDateTime::createFromFormat(DATETIME_DATETIME_STORAGE_FORMAT, $end_timestamp, $date_timezone);
-          // Convert the DateTime object back to UTC timezone.
-          $end_date->setTimezone($utc_timezone);
-
-          $config['custom_dates'][] = [
-            'start_date' => $start_date,
-            'end_date' => $end_date,
-          ];
+          if (!empty($custom_date['value']['date'])
+            && !empty($custom_date['value']['time'])
+            && !empty($custom_date['end_value']['date'])
+            && !empty($custom_date['end_value']['time'])) {
+            $start_timestamp = implode('T', $custom_date['value']);
+            $start_date = DrupalDateTime::createFromFormat(DATETIME_DATETIME_STORAGE_FORMAT, $start_timestamp, $user_timezone);
+            // Convert the DateTime object back to UTC timezone.
+            $start_date->setTimezone($utc_timezone);
+
+            $end_timestamp = implode('T', $custom_date['end_value']);
+            $end_date = DrupalDateTime::createFromFormat(DATETIME_DATETIME_STORAGE_FORMAT, $end_timestamp, $user_timezone);
+            // Convert the DateTime object back to UTC timezone.
+            $end_date->setTimezone($utc_timezone);
+
+            $config['custom_dates'][] = [
+              'start_date' => $start_date,
+              'end_date' => $end_date,
+            ];
+          }
         }
         break;
     }
diff --git a/src/Plugin/Field/FieldWidget/WeeklyRecurringDateWidget.php b/src/Plugin/Field/FieldWidget/WeeklyRecurringDateWidget.php
index 0e1fcba86bddad0eeeb5f03c2e3a2165d9cef6d5..5a8d6374b40cf7c381cb6305385eb61722b36bef 100644
--- a/src/Plugin/Field/FieldWidget/WeeklyRecurringDateWidget.php
+++ b/src/Plugin/Field/FieldWidget/WeeklyRecurringDateWidget.php
@@ -85,13 +85,13 @@ class WeeklyRecurringDateWidget extends DateRangeDefaultWidget {
         $item['value'] = '';
       }
       else {
-        $item['value'] = substr($item['value'], 0, 10) . 'T00:00:00';
+        $item['value'] = substr($item['value'], 0, 10) . 'T12:00:00';
       }
       if (empty($item['end_value'])) {
         $item['end_value'] = '';
       }
       else {
-        $item['end_value'] = substr($item['end_value'], 0, 10) . 'T00:00:00';
+        $item['end_value'] = substr($item['end_value'], 0, 10) . 'T12:00:00';
       }
 
       $item['days'] = array_filter($item['days']);