diff --git a/core/modules/datetime/src/Plugin/views/filter/Date.php b/core/modules/datetime/src/Plugin/views/filter/Date.php
index e53cb1c..6b6b881 100644
--- a/core/modules/datetime/src/Plugin/views/filter/Date.php
+++ b/core/modules/datetime/src/Plugin/views/filter/Date.php
@@ -90,7 +90,7 @@ public static function create(ContainerInterface $container, array $configuratio
    * Override parent method, which deals with dates as integers.
    */
   protected function opBetween($field) {
-    $origin = ($this->value['type'] == 'offset') ? $this->requestStack->getCurrentRequest()->server->get('REQUEST_TIME') : 0;
+    $origin = $this->requestStack->getCurrentRequest()->server->get('REQUEST_TIME');
     $a = intval(strtotime($this->value['min'], $origin));
     $b = intval(strtotime($this->value['max'], $origin));
 
@@ -112,7 +112,7 @@ protected function opBetween($field) {
    * Override parent method, which deals with dates as integers.
    */
   protected function opSimple($field) {
-    $origin =  (!empty($this->value['type']) && $this->value['type'] == 'offset') ? $this->requestStack->getCurrentRequest()->server->get('REQUEST_TIME') : 0;
+    $origin = $this->requestStack->getCurrentRequest()->server->get('REQUEST_TIME');
     $value = intval(strtotime($this->value['value'], $origin));
 
     // Convert to ISO. UTC is used since dates are stored in UTC.
diff --git a/core/modules/datetime/src/Tests/Views/FilterDateTimeTest.php b/core/modules/datetime/src/Tests/Views/FilterDateTimeTest.php
index 6b24eab..b6cfe5a 100644
--- a/core/modules/datetime/src/Tests/Views/FilterDateTimeTest.php
+++ b/core/modules/datetime/src/Tests/Views/FilterDateTimeTest.php
@@ -62,6 +62,7 @@ public function testDatetimeFilter() {
     $this->_testOffset();
     $this->_testBetween();
     $this->_testExact();
+    $this->_testRelative();
   }
 
   /**
@@ -186,4 +187,95 @@ protected function _testExact() {
 
   }
 
+  /**
+   * Test date matching relative to today.
+   */
+  protected function _testRelative() {
+    $view = Views::getView('test_filter_datetime');
+    $field = static::$field_name . '_value';
+
+    // Test a simple greater than operator.
+    $view->initHandlers();
+    $view->filter[$field]->operator = '>';
+    $view->filter[$field]->value['type'] = 'date';
+    $view->filter[$field]->value['value'] = 'today';
+    $view->setDisplay('default');
+    $this->executeView($view);
+    $expected_result = [
+      ['nid' => $this->nodes[3]->id()],
+    ];
+    $this->assertIdenticalResultset($view, $expected_result, $this->map);
+    $view->destroy();
+
+    // Test a simple less than operator.
+    $view->initHandlers();
+    $view->filter[$field]->operator = '<';
+    $view->filter[$field]->value['type'] = 'date';
+    $view->filter[$field]->value['value'] = 'today';
+    $view->setDisplay('default');
+    $this->executeView($view);
+    $expected_result = [
+      ['nid' => $this->nodes[0]->id()],
+      ['nid' => $this->nodes[1]->id()],
+      ['nid' => $this->nodes[2]->id()],
+    ];
+    $this->assertIdenticalResultset($view, $expected_result, $this->map);
+    $view->destroy();
+
+    // Test between operator with min and max.
+    $view->initHandlers();
+    $view->filter[$field]->operator = 'between';
+    $view->filter[$field]->value['min'] = 'January 2001';
+    $view->filter[$field]->value['max'] = 'January 2002';
+    $view->setDisplay('default');
+    $this->executeView($view);
+    $expected_result = [
+      ['nid' => $this->nodes[1]->id()],
+    ];
+    $this->assertIdenticalResultset($view, $expected_result, $this->map);
+    $view->destroy();
+
+    // Test between operator with just max.
+    $view->initHandlers();
+    $view->filter[$field]->operator = 'between';
+    $view->filter[$field]->value['max'] = 'first day of January 2002';
+    $view->setDisplay('default');
+    $this->executeView($view);
+    $expected_result = [
+      ['nid' => $this->nodes[0]->id()],
+      ['nid' => $this->nodes[1]->id()],
+    ];
+    $this->assertIdenticalResultset($view, $expected_result, $this->map);
+    $view->destroy();
+
+    // Test not between operator with min and max.
+    $view->initHandlers();
+    $view->filter[$field]->operator = 'not between';
+    $view->filter[$field]->value['min'] = 'jan 2001';
+    $view->filter[$field]->value['max'] = 'jan 2002';
+    $view->setDisplay('default');
+    $this->executeView($view);
+    $expected_result = [
+      ['nid' => $this->nodes[0]->id()],
+      ['nid' => $this->nodes[2]->id()],
+      ['nid' => $this->nodes[3]->id()],
+    ];
+    $this->assertIdenticalResultset($view, $expected_result, $this->map);
+    $view->destroy();
+
+    // Test not between operator with max.
+    $view->initHandlers();
+    $view->filter[$field]->operator = 'not between';
+    $view->filter[$field]->value['max'] = 'Jan 2000 +1 year';
+    $view->setDisplay('default');
+    $this->executeView($view);
+    $expected_result = [
+      ['nid' => $this->nodes[1]->id()],
+      ['nid' => $this->nodes[2]->id()],
+      ['nid' => $this->nodes[3]->id()],
+    ];
+    $this->assertIdenticalResultset($view, $expected_result, $this->map);
+    $view->destroy();
+  }
+
 }
