diff --git a/includes/webform.report.inc b/includes/webform.report.inc
index 49bae4b..8c03648 100644
--- a/includes/webform.report.inc
+++ b/includes/webform.report.inc
@@ -484,6 +484,7 @@ function webform_results_download_form($form, &$form_state, $node) {
       'new' => t('Only new submissions since your last download'),
       'latest' => t('Only the latest'),
       'range_serial' => t('All submissions starting from'),
+      'date' => t('All submissions by date'),
     ),
     '#default_value' => 'all',
   );
@@ -503,6 +504,19 @@ function webform_results_download_form($form, &$form_state, $node) {
     '#maxlength' => 8,
   );

+  $now = format_date(REQUEST_TIME, 'custom', 'Y-m-d');
+  $form['range']['start_date'] = array(
+    '#type' => 'textfield',
+    '#size' => 20,
+    '#default_value' => $now . ' 00:00'
+  );
+  $form['range']['end_date'] = array(
+    '#type' => 'textfield',
+    '#size' => 20,
+    '#default_value' => $now . ' 23:59'
+  );
+
+
   // If drafts are allowed, provide options to filter download based on draft status.
   if ($node->webform['allow_draft'] || $node->webform['auto_save']) {
     $form['range']['completion_type'] = array(
@@ -592,6 +606,26 @@ function webform_results_download_range_validate($element, $form_state) {
         form_error($element['start'], t('The specified range will not return any results.'));
       }
       break;
+    case 'date':
+      // Start submission time.
+      if ($element['start_date']['#value'] == '') {
+        form_error($element['start_date'], t('Start submission time is required.'));
+      }
+      else{
+        if (!preg_match("([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2})", $element['start_date']['#value'])) {
+         form_error($element['start_date'], t('Start submission time must be in the form Y-m-d HH:MM using a 24-hr time format.'));
+        }
+      }
+      // End submission time.
+      if ($element['end_date']['#value'] == '') {
+        form_error($element['end_date'], t('End submission time is required.'));
+      }
+      else{
+        if (!preg_match("([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2})", $element['end_date']['#value'])) {
+          form_error($element['end_date'], t('End submission time must be in the form Y-m-d HH:MM using a 24-hr time format.'));
+        }
+      }
+      break;
   }

 }
@@ -653,12 +687,21 @@ function theme_webform_results_download_range($variables) {
   $element['end']['#attributes']['class'][] = 'webform-set-active';
   $element['start']['#theme_wrappers'] = array();
   $element['end']['#theme_wrappers'] = array();
+  $element['start_date']['#attributes']['class'] = array('webform-set-active');
+  $element['end_date']['#attributes']['class'] = array('webform-set-active');
+  $element['start_date']['#theme_wrappers'] = array();
+  $element['end_date']['#theme_wrappers'] = array();
   $element['range_type']['range_serial']['#theme_wrappers'] = array('webform_inline_radio');
   $element['range_type']['range_serial']['#title'] = t('All submissions starting from: !start and optionally to: !end', array('!start' => drupal_render($element['start']), '!end' => drupal_render($element['end'])));

   $last_serial = $download_info['serial'] ? $download_info['serial'] : drupal_placeholder(t('none'));
   $element['range_type']['range_serial']['#description'] = '(' . t('Last downloaded end submission number: !serial.', array('!serial' => $last_serial)) . ')';

+  // date range
+  $element['range_type']['date']['#theme_wrappers'] = array('webform_inline_radio');
+  $element['range_type']['date']['#title'] = t('All submissions by Date starting from: !start_date   to: !end_date', array('!start_date' => drupal_render($element['start_date']), '!end_date' => drupal_render($element['end_date'])));
+  $element['range_type']['date']['#description'] = '(' . t('Use 24-hr time format') . ')';
+
   return drupal_render_children($element);
 }

@@ -1637,6 +1680,14 @@ function webform_download_sids($nid, $range_options, $uid = NULL) {
       }
       $query->orderBy('serial', 'ASC');
       break;
+    case 'date':
+      // Submissions by timestamp
+      $start_time_stamp = strtotime($range_options['start_date']);
+      $end_time_stamp = strtotime($range_options['end_date']);
+      $query->condition('submitted', $start_time_stamp, '>=');
+      $query->condition('submitted', $end_time_stamp, '<=');
+      $query->orderBy('sid', 'ASC');
+      break;
   }

   // Filter down to draft or finished submissions.
