diff --git a/core/modules/datetime/src/Plugin/views/filter/Date.php b/core/modules/datetime/src/Plugin/views/filter/Date.php
index 9fd47fd..4811394 100644
--- a/core/modules/datetime/src/Plugin/views/filter/Date.php
+++ b/core/modules/datetime/src/Plugin/views/filter/Date.php
@@ -3,6 +3,7 @@
 namespace Drupal\datetime\Plugin\views\filter;
 
 use Drupal\Core\Datetime\DateFormatterInterface;
+use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
 use Drupal\views\FieldAPIHandlerTrait;
@@ -123,4 +124,19 @@ protected function opSimple($field) {
     $this->query->addWhereExpression($this->options['group'], "$field $this->operator $value");
   }
 
+  /**
+   * Override parent method to change input type.
+   */
+  public function buildExposedForm(&$form, FormStateInterface $form_state) {
+    parent::buildExposedForm($form, $form_state);
+
+    $field_identifier = $this->options['expose']['identifier'];
+    if ($this->operator == 'between') {
+      $form[$field_identifier]['min']['#type'] = 'date';
+      $form[$field_identifier]['max']['#type'] = 'date';
+    } else {
+      $form[$field_identifier]['#type'] = 'date';
+    }
+  }
+
 }
diff --git a/core/modules/datetime/src/Tests/Views/FilterDateTest.php b/core/modules/datetime/src/Tests/Views/FilterDateTest.php
index 2a8d7cd..125825f 100644
--- a/core/modules/datetime/src/Tests/Views/FilterDateTest.php
+++ b/core/modules/datetime/src/Tests/Views/FilterDateTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\datetime\Tests\Views;
 use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
 use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\views\Entity\View;
 use Drupal\views\Views;
 
 /**
@@ -107,4 +108,19 @@ public function testDateOffsets() {
     $this->assertIdenticalResultset($view, $expected_result, $this->map);
   }
 
+  public function testExposedForm() {
+    $view = View::load('test_filter_datetime');
+    $view->set('display.default.display_options.filters.field_date_value.exposed', TRUE);
+    $view->save();
+    $element = array(
+      '#type' => 'view',
+      '#name' => 'test_filter_datetime',
+    );
+    $renderer = $this->container->get('renderer');
+    $output = $renderer->renderPlain($element);
+    $this->verbose($output);
+
+    $this->assertTrue(strpos((string) $output, '<input type="date"') !== FALSE);
+  }
+
 }
diff --git a/core/modules/datetime/tests/modules/datetime_test/test_views/views.view.test_filter_datetime.yml b/core/modules/datetime/tests/modules/datetime_test/test_views/views.view.test_filter_datetime.yml
index abd0e4f..e15aee1 100644
--- a/core/modules/datetime/tests/modules/datetime_test/test_views/views.view.test_filter_datetime.yml
+++ b/core/modules/datetime/tests/modules/datetime_test/test_views/views.view.test_filter_datetime.yml
@@ -2,6 +2,7 @@ langcode: und
 status: true
 dependencies:
   module:
+    - datetime
     - node
 id: test_filter_datetime
 label: ''
@@ -31,6 +32,38 @@ display:
           id: field_date_value
           table: node__field_date
           field: field_date_value
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: '='
+          group: 1
+          exposed: true
+          expose:
+            operator_id: field_date_value_op
+            label: 'Date (field_date)'
+            description: ''
+            use_operator: false
+            operator: field_date_value_op
+            identifier: field_date_value
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+              anonymous: '0'
+              administrator: '0'
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
           plugin_id: datetime
       sorts:
         id:
@@ -50,7 +83,17 @@ display:
         type: default
       row:
         type: fields
+      display_extenders: {  }
     display_plugin: default
     display_title: Master
     id: default
     position: 0
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_content'
+        - 'languages:language_interface'
+        - url
+        - url.query_args
+        - 'user.node_grants:view'
+      tags: {  }
diff --git a/core/modules/views/src/Plugin/views/filter/Date.php b/core/modules/views/src/Plugin/views/filter/Date.php
index 8ea3750..0e0a098 100644
--- a/core/modules/views/src/Plugin/views/filter/Date.php
+++ b/core/modules/views/src/Plugin/views/filter/Date.php
@@ -183,4 +183,19 @@ protected function opSimple($field) {
     $this->query->addWhereExpression($this->options['group'], "$field $this->operator $value");
   }
 
+  /**
+   * Override parent method to change input type.
+   */
+  public function buildExposedForm(&$form, FormStateInterface $form_state) {
+    parent::buildExposedForm($form, $form_state);
+
+    $field_identifier = $this->options['expose']['identifier'];
+    if ($this->operator == 'between') {
+      $form[$field_identifier]['min']['#type'] = 'date';
+      $form[$field_identifier]['max']['#type'] = 'date';
+    } else {
+      $form[$field_identifier]['#type'] = 'date';
+    }
+  }
+
 }
