diff --git a/src/Plugin/facetapi/widget/DateRangeWidget.php b/src/Plugin/facetapi/widget/DateRangeWidget.php
new file mode 100644
index 0000000..4b1ed83
--- /dev/null
+++ b/src/Plugin/facetapi/widget/DateRangeWidget.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace Drupal\facetapi\Plugin\facetapi\Widget;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\facetapi\FacetInterface;
+use Drupal\facetapi\Result\Result;
+use Drupal\facetapi\Widget\WidgetInterface;
+use Drupal\search_api\Plugin\facetapi\query_type\SearchApiDate;
+
+/**
+ * @FacetApiWidget(
+ *   id = "date_range",
+ *   label = @Translation("Date range widget"),
+ *   description = @Translation("Date range wiget"),
+ * )
+ */
+class DateRangeWidget implements WidgetInterface {
+
+
+  use StringTranslationTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function execute() {
+    // Execute all the things.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build(FacetInterface $facet) {
+    /** @var Result[] $results */
+    $results = $facet->getResults();
+    $items = [];
+    foreach ($results as $result) {
+      if ($result->getCount()) {
+        // Get the link.
+        $text = $result->getDisplayValue() . ' (' . $result->getCount() . ')';
+        if ($result->isActive()) {
+          $text = '(-) ' . $text;
+        }
+        $link_generator = \Drupal::linkGenerator();
+        $link = $link_generator->generate($text, $result->getUrl());
+        $items[] = $link;
+      }
+    }
+    $build = [
+      '#theme' => 'item_list',
+      '#items' => $items,
+    ];
+
+    $build['#prefix'] = $this->t('Date widget');
+    return $build;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state, $config) {
+
+    $options = [
+      SearchApiDate::FACETAPI_DATE_YEAR => $this->t('Year'),
+      SearchApiDate::FACETAPI_DATE_MONTH => $this->t('Month'),
+      SearchApiDate::FACETAPI_DATE_DAY => $this->t('Day'),
+      SearchApiDate::FACETAPI_DATE_HOUR => $this->t('Hour'),
+      SearchApiDate::FACETAPI_DATE_MINUTE => $this->t('Minute'),
+      SearchApiDate::FACETAPI_DATE_SECOND => $this->t('Seconds'),
+    ];
+
+    $form['granularity'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Granularity'),
+      '#description' => $this->t('Determine the maximum drill-down level.'),
+      '#options' => $options,
+      '#required' => TRUE,
+    ];
+
+    if (!is_null($config)) {
+      $widget_configs = $config->get('widget_configs');
+      if (isset($widget_configs['granularity'])) {
+        $form['granularity']['#default_value'] = $widget_configs['granularity'];
+      }
+    }
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQueryType($query_types) {
+    return $query_types['date'];
+  }
+
+}
