diff --git a/handlers/views_handler_field_date.inc b/handlers/views_handler_field_date.inc
index 8f3fe39..3cd3faa 100644
--- a/handlers/views_handler_field_date.inc
+++ b/handlers/views_handler_field_date.inc
@@ -16,12 +16,12 @@ class views_handler_field_date extends views_handler_field {
 
     $options['date_format'] = array('default' => 'small');
     $options['custom_date_format'] = array('default' => '');
+    $options['query_format'] = array('default' => FALSE);
 
     return $options;
   }
 
   function options_form(&$form, &$form_state) {
-
     $date_formats = array();
     $date_types = system_get_date_types();
     foreach ($date_types as $key => $value) {
@@ -51,9 +51,84 @@ class views_handler_field_date extends views_handler_field {
       '#dependency' => array('edit-options-date-format' => array('custom', 'raw time ago', 'time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span')),
     );
 
+    $form['query_format'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Use Date Format in query'),
+      '#default_value' => $this->options['query_format'],
+      '#description' => t('Change the SQL query to use the defined date format instead standard unixtime. Not applicable to Time ago, Time hence and Time span formats.'),
+      '#dependency' => array('edit-options-date-format' => array_merge(array_keys($date_formats), array('custom'))),
+    );
+
     parent::options_form($form, $form_state);
   }
 
+  /**
+   * Validate the options form.
+   */
+  function options_validate(&$form, &$form_state) {
+    $default_views_formats = array('raw time ago', 'time ago', 'raw time hence', 'time hence', 'raw time span', 'inverse time span', 'time span');
+
+    if ($form_state['values']['options']['query_format'] && in_array($form_state['values']['options']['date_format'], $default_views_formats)) {
+      if (array_key_exists('has_js', $_COOKIE) && $_COOKIE['has_js']) {
+        $form_state['values']['options']['query_format'] = 0;
+      }
+      else {
+        form_set_error('query_format', t('Use Date Format in query option is not applicable to Time ago, Time hence and Time span formats.'));
+      }
+    }
+
+    parent::options_validate($form, $form_state);
+  }
+
+  function query() {
+    $this->ensure_my_table();
+
+    $format = '';
+    $params = $this->options['group_type'] != 'group' ? array('function' => $this->options['group_type']) : array();
+    if ($this->options['query_format']) {
+
+      $date_format = $this->options['date_format'];
+      $default_views_formats = array('raw time ago', 'time ago', 'raw time hence', 'time hence', 'raw time span', 'inverse time span', 'time span');
+
+      dsm($date_format);
+      if (!in_array($date_format, $default_views_formats)) {
+        switch ($date_format) {
+          case 'short':
+            $format = variable_get('date_format_short', 'm/d/Y - H:i');
+            break;
+
+          case 'medium':
+            $format = variable_get('date_format_medium', 'D, m/d/Y - H:i');
+            break;
+
+          case 'long':
+            $format = variable_get('date_format_long', 'l, F j, Y - H:i');
+            break;
+
+          case 'custom':
+            $format = $this->options['custom_date_format'];
+            break;
+
+          default:
+            $format = variable_get('date_format_' . $date_format, '');
+        }
+      }
+      debug($date_format);
+      $sql_date_format = views_date_sql_format($format, $this->table_alias . '.' . $this->real_field);
+      debug($sql_date_format);
+      $this->field_alias = $this->query->add_field(NULL, $sql_date_format, $this->table_alias . '_' . $this->real_field, $params);
+    }
+    else {
+      $this->field_alias = $this->query->add_field($this->table_alias, $this->real_field, NULL, $params);
+    }
+
+    if ($this->options['group_type'] == 'group') {
+      $this->query->add_groupby($this->table_alias . '_' . $this->real_field);
+    }
+
+    $this->add_additional_fields();
+  }
+
   function render($values) {
     $value = $this->get_value($values);
     $format = $this->options['date_format'];
@@ -80,11 +155,11 @@ class views_handler_field_date extends views_handler_field {
           return t(($time_diff < 0 ? '%time hence' : '%time ago'), array('%time' => format_interval(abs($time_diff), is_numeric($custom_format) ? $custom_format : 2)));
         case 'custom':
           if ($custom_format == 'r') {
-            return format_date($value, $format, $custom_format, null, 'en');
+            return ($this->options['query_format']) ? $value : format_date($value, $format, $custom_format, null, 'en');
           }
-          return format_date($value, $format, $custom_format);
+          return ($this->options['query_format']) ? $value : format_date($value, $format, $custom_format);
         default:
-          return format_date($value, $format);
+          return ($this->options['query_format']) ? $value : format_date($value, $format);
       }
     }
   }
diff --git a/includes/handlers.inc b/includes/handlers.inc
index 435f3b2..5fed499 100644
--- a/includes/handlers.inc
+++ b/includes/handlers.inc
@@ -1273,7 +1273,9 @@ function views_date_sql_format($format, $field, $field_type = 'int', $set_offset
         's' => '%s',
         'A' => '%p',
         );
+      debug($format);
       $format = strtr($format, $replace);
+      debug($format);
       return "DATE_FORMAT($field, '$format')";
     case 'pgsql':
       $replace = array(
diff --git a/tests/handlers/views_handler_field_date.test b/tests/handlers/views_handler_field_date.test
index 5b0962c..a9d45a3 100644
--- a/tests/handlers/views_handler_field_date.test
+++ b/tests/handlers/views_handler_field_date.test
@@ -39,9 +39,9 @@ class ViewsHandlerFieldDateTest extends ViewsSqlTest {
     $time = gmmktime(0, 0, 0, 1, 1, 2000);
 
     $maps = array(
-      'small' => format_date($time, 'small'),
+      'short' => format_date($time, 'short'),
       'medium' => format_date($time, 'medium'),
-      'large' => format_date($time, 'large'),
+      'long' => format_date($time, 'long'),
       'custom' => format_date($time, 'custom', 'c'),
       'raw time ago' => format_interval(REQUEST_TIME - $time, 2),
       'time ago' => t('%time ago', array('%time' => format_interval(REQUEST_TIME - $time, 2))),
@@ -55,8 +55,36 @@ class ViewsHandlerFieldDateTest extends ViewsSqlTest {
     foreach ($maps as $date_format => $expected_result) {
       $view->field['created']->options['date_format'] = $date_format;
       $this->assertEqual($expected_result, $view->field['created']->advanced_render($view->result[0]));
-      debug($view->field['created']->advanced_render($view->result[0]));
     }
-    debug($view->result);
+    $view->destroy();
+
+    // Test the query_format setting.
+    $view->display['default']->display_options['fields'] = array(
+      'created' => array(
+        'id' => 'created',
+        'table' => 'views_test',
+        'field' => 'created',
+        'relationship' => 'none',
+        // c is iso 8601 date format @see http://php.net/manual/en/function.date.php
+        'custom_date_format' => 'W D F',
+        'query_format' => TRUE,
+      ),
+    );
+    $maps = array(
+      'short' => format_date($time, 'short'),
+      'medium' => format_date($time, 'medium'),
+      'long' => format_date($time, 'long'),
+      'custom' => format_date($time, 'custom', 'W D F'),
+    );
+
+    foreach ($maps as $date_format => $expected_result) {
+      $view->init_display();
+      $view->init_handlers();
+      $view->field['created']->options['date_format'] = $date_format;
+
+      $this->executeView($view);
+      $this->assertEqual($expected_result, $view->field['created']->advanced_render($view->result[0]));
+      $view->destroy();
+    }
   }
 }
