diff handlers/views_handler_filter_date.inc handlers/views_handler_filter_date.inc
--- handlers/views_handler_filter_date.inc
+++ handlers/views_handler_filter_date.inc
@@ -158,13 +158,11 @@ class views_handler_filter_date extends views_handler_filter_numeric {
   }
 
   function op_between($field) {
-    $a = intval(strtotime($this->value['min'], 0));
-    $b = intval(strtotime($this->value['max'], 0));
+    // Use the substitutions to ensure a consistent timestamp.
+    $query_substitutions = views_views_query_substitutions($this->view);
+    $a = intval(strtotime($this->value['min'], $query_substitutions['***CURRENT_TIME***']));
+    $b = intval(strtotime($this->value['max'], $query_substitutions['***CURRENT_TIME***']));
 
-    if ($this->value['type'] == 'offset') {
-      $a = '***CURRENT_TIME***' . sprintf('%+d', $a); // keep sign
-      $b = '***CURRENT_TIME***' . sprintf('%+d', $b); // keep sign
-    }
     // This is safe because we are manually scrubbing the values.
     // It is necessary to do it this way because $a and $b are formulas when using an offset.
     $operator = strtoupper($this->operator);
@@ -172,10 +170,10 @@ class views_handler_filter_date extends views_handler_filter_numeric {
   }
 
   function op_simple($field) {
-    $value = intval(strtotime($this->value['value'], 0));
-    if (!empty($this->value['type']) && $this->value['type'] == 'offset') {
-      $value = '***CURRENT_TIME***' . sprintf('%+d', $value); // keep sign
-    }
+    // Use the substitutions to ensure a consistent timestamp.
+    $query_substitutions = views_views_query_substitutions($this->view);
+    $value = intval(strtotime($this->value['value'], $query_substitutions['***CURRENT_TIME***']));
+
     // This is safe because we are manually scrubbing the value.
     // It is necessary to do it this way because $value is a formula when using an offset.
     $this->query->add_where_expression($this->options['group'], "$field $this->operator $value");
diff --git tests/handlers/views_handler_filter_date.test tests/handlers/views_handler_filter_date.test
index 34ccba6..3f910bf 100644
--- tests/handlers/views_handler_filter_date.test
+++ tests/handlers/views_handler_filter_date.test
@@ -25,6 +25,7 @@ class ViewsHandlerFilterDateTest extends ViewsSqlTest {
     $this->nodes[] = $this->drupalCreateNode(array('created' => 200000));
     $this->nodes[] = $this->drupalCreateNode(array('created' => 300000));
     $this->nodes[] = $this->drupalCreateNode(array('created' => time() + 86400));
+    //$this->nodes[] = $this->drupalCreateNode(array('created' => 1388534400)); // 1st Jan 2014
 
     $this->map = array(
       'nid' => 'nid',
@@ -50,6 +51,21 @@ class ViewsHandlerFilterDateTest extends ViewsSqlTest {
     $this->assertIdenticalResultset($view, $expected_result, $this->map);
     $view->destroy();
 
+    // Test "first day of" type of relative dates for simple operator.
+    $view->set_display('default');
+    $view->init_handlers();
+    $view->filter['created']->operator = '<';
+    $view->filter['created']->value['type'] = 'offset';
+    $view->filter['created']->value['value'] = 'last day of January 1970';
+    $view->execute_display('default');
+    $expected_result = array(
+      array('nid' => $this->nodes[0]->nid),
+      array('nid' => $this->nodes[1]->nid),
+      array('nid' => $this->nodes[2]->nid),
+    );
+    $this->assertIdenticalResultset($view, $expected_result, $this->map);
+    $view->destroy();
+
     // Test offset for between operator.
     $view->set_display('default');
     $view->init_handlers();
@@ -63,6 +79,22 @@ class ViewsHandlerFilterDateTest extends ViewsSqlTest {
     );
     $this->assertIdenticalResultset($view, $expected_result, $this->map);
     $view->destroy();
+
+    // Test "first day of" type of relative dates for between operator.
+    $view->set_display('default');
+    $view->init_handlers();
+    $view->filter['created']->operator = 'between';
+    $view->filter['created']->value['type'] = 'offset';
+    $view->filter['created']->value['max'] = 'last day of January 1970';
+    $view->filter['created']->value['min'] = 'first day of January 1970';
+    $view->execute_display('default');
+    $expected_result = array(
+      array('nid' => $this->nodes[0]->nid),
+      array('nid' => $this->nodes[1]->nid),
+      array('nid' => $this->nodes[2]->nid),
+    );
+    $this->assertIdenticalResultset($view, $expected_result, $this->map);
+    $view->destroy();
   }
 
 
