diff --git a/uc_reports/uc_reports.admin.inc b/uc_reports/uc_reports.admin.inc
index bf937cb..1b80fc1 100644
--- a/uc_reports/uc_reports.admin.inc
+++ b/uc_reports/uc_reports.admin.inc
@@ -638,21 +638,29 @@ function theme_uc_reports_product_table($header, $rows, $attributes = array(), $
  * Display the sales summary report.
  */
 function uc_reports_sales_summary() {
-  $timezone_offset = time() + _uc_reports_timezone_offset();
-  $order_statuses = _uc_reports_order_statuses();
-  $format = variable_get('uc_date_format_default', 'm/d/Y');
-
-  $date_month = gmdate('n', $timezone_offset);
-  $date_year = gmdate('Y', $timezone_offset);
-  $date_day_of_month = gmdate('j', $timezone_offset);
-  $date_days_in_month = gmdate('t', $timezone_offset);
-
-  $month_start = gmmktime(0, 0, 0, $date_month, 1, $date_year);
-  $month_end = gmmktime(23, 59, 59, $date_month, $date_days_in_month, $date_year);
+  // "Now" timestamp
+  $time = time();
 
-  $today_start = gmmktime(0, 0, 0, $date_month, $date_day_of_month, $date_year);
-  $today_end = gmmktime(23, 59, 59, $date_month, $date_day_of_month, $date_year);
+  // Site time minus GMT time, in seconds
+  $timezone_offset = _uc_reports_timezone_offset();
 
+  // Find day/month/year of "Now" in site timezone
+  $date_month = format_date($time, 'custom', 'n', $timezone_offset);
+  $date_year = format_date($time, 'custom', 'Y', $timezone_offset);
+  $date_day_of_month = format_date($time, 'custom', 'j', $timezone_offset);
+  $date_days_in_month = format_date($time, 'custom', 't', $timezone_offset);
+
+  // Calculate Unix timecodes (defined to be in GMT time)
+  // for beginning and ending of reporting periods
+  // Use gm functions so PHP won't try to do any timezone conversions by itself
+  $month_start = gmmktime(0, 0, 0, $date_month, 1, $date_year) - $timezone_offset;
+  $month_end = gmmktime(23, 59, 59, $date_month, $date_days_in_month, $date_year) - $timezone_offset;
+  $today_start = gmmktime(0, 0, 0, $date_month, $date_day_of_month, $date_year) - $timezone_offset;
+  $today_end = gmmktime(23, 59, 59, $date_month, $date_day_of_month, $date_year) - $timezone_offset;
+
+  // Initialize variables used later
+  $order_statuses = _uc_reports_order_statuses();
+  $format = variable_get('uc_date_format_default', 'm/d/Y');
   // Build the report table header.
   $header = array(t('Sales data'), t('Number of orders'), t('Total revenue'), t('Average order'));
 
@@ -665,7 +673,7 @@ function uc_reports_sales_summary() {
   );
 
   $rows[] = array(
-    l(t('Today, !date', array('!date' => format_date($today_start, 'custom', $format, 0))), 'admin/store/orders/search/results/0/0/0/0/0/0/'. $today_start .'/'. $today_end),
+    l(t('Today, !date', array('!date' => format_date($today_start, 'custom', $format, $timezone_offset))), 'admin/store/orders/search/results/0/0/0/0/0/0/'. $today_start .'/'. $today_end),
     $today['total'],
     uc_price($today['income'], $context),
     uc_price($today['average'], $context),
@@ -675,7 +683,7 @@ function uc_reports_sales_summary() {
   $yesterday = _uc_reports_get_sales($today_start - 86400);
 
   $rows[] = array(
-    l(t('Yesterday, !date', array('!date' => format_date($today_start - 86400, 'custom', $format, 0))), 'admin/store/orders/search/results/0/0/0/0/0/0/'. ($today_start - 86400) .'/'. ($today_end - 86400)),
+    l(t('Yesterday, !date', array('!date' => format_date($today_start - 86400, 'custom', $format, $timezone_offset))), 'admin/store/orders/search/results/0/0/0/0/0/0/'. ($today_start - 86400) .'/'. ($today_end - 86400)),
     $yesterday['total'],
     uc_price($yesterday['income'], $context),
     uc_price($yesterday['average'], $context),
@@ -683,7 +691,7 @@ function uc_reports_sales_summary() {
 
   // Get the sales report for the month.
   $month = _uc_reports_get_sales($month_start, 'month');
-  $month_title = format_date($month_start, 'custom', 'M Y', 0);
+  $month_title = format_date($month_start, 'custom', 'M Y', $timezone_offset);
 
   // Add the month-to-date details to the report table.
   $rows[] = array(
@@ -778,12 +786,17 @@ function uc_reports_sales_summary() {
  * Display the yearly sales report form and table.
  */
 function uc_reports_sales_year() {
-  $timezone_offset = time() + _uc_reports_timezone_offset();
+  // "Now" timestamp
+  $time = time();
+
+  // Site time minus GMT time, in seconds
+  $timezone_offset = _uc_reports_timezone_offset();
+  
   $order_statuses = _uc_reports_order_statuses();
 
   // Get the year for the report from the URL.
   if (intval(arg(5)) == 0) {
-    $year = format_date($timezone_offset, 'custom', 'Y', 0);
+    $year = format_date($time, 'custom', 'Y', $timezone_offset);
   }
   else {
     $year = arg(5);
@@ -803,8 +816,8 @@ function uc_reports_sales_year() {
   // For each month of the year...
   for ($i = 1; $i <= 12; $i++) {
     // Calculate the start and end timestamps for the month in local time.
-    $month_start = gmmktime(0, 0, 0, $i, 1, $year);
-    $month_end = gmmktime(23, 59, 59, $i + 1, 0, $year);
+    $month_start = gmmktime(0, 0, 0, $i, 1, $year) - $timezone_offset;
+    $month_end = gmmktime(23, 59, 59, $i + 1, 0, $year) - $timezone_offset;
 
     // Get the sales report for the month.
     $month_sales = _uc_reports_get_sales($month_start, 'month');
@@ -819,7 +832,7 @@ function uc_reports_sales_year() {
 
     // Add the month's row to the report table.
     $rows[] = array(
-      l(gmdate('M Y', $month_start), 'admin/store/orders/search/results/0/0/0/0/0/0/'. $month_start .'/'. $month_end),
+      l(format_date($month_start, 'custom', 'M Y', $timezone_offset), 'admin/store/orders/search/results/0/0/0/0/0/0/'. $month_start .'/'. $month_end),
       $month_sales['total'],
       uc_price($month_sales['income'], $context),
       uc_price($month_average, $context),
@@ -827,7 +840,7 @@ function uc_reports_sales_year() {
 
     // Add the data to the CSV export.
     $csv_rows[] = array(
-      gmdate('M Y', $month_start),
+      format_date($month_start, 'custom', 'M Y', $timezone_offset),
       $month_sales['total'],
       uc_price($month_sales['income'], $context),
       uc_price($month_average, $context),
@@ -835,8 +848,8 @@ function uc_reports_sales_year() {
   }
 
   // Calculate the start and end timestamps for the year in local time.
-  $year_start = gmmktime(0, 0, 0, 1, 1, $year);
-  $year_end = gmmktime(23, 59, 59, 1, 0, $year + 1);
+  $year_start = gmmktime(0, 0, 0, 1, 1, $year) - $timezone_offset;
+  $year_end = gmmktime(23, 59, 59, 1, 0, $year + 1) - $timezone_offset;
 
   // Get the sales report for the year.
   $year_sales = _uc_reports_get_sales($year_start, 'year');
@@ -969,10 +982,10 @@ function uc_reports_sales_custom() {
 
     // Create the date title for the subreport.
     if ($args['length'] == 'day') {
-      $date = format_date($subreport['start'], 'custom', $format .' - D', 0);
+      $date = format_date($subreport['start'], 'custom', $format .' - D', $timezone);
     }
     else {
-      $date = format_date($subreport['start'], 'custom', $format, 0) .' - '. format_date($subreport['end'], 'custom', $format, 0);
+      $date = format_date($subreport['start'], 'custom', $format, $timezone) .' - '. format_date($subreport['end'], 'custom', $format, $timezone);
     }
 
     // Build the order data for the subreport.
@@ -1063,6 +1076,7 @@ function uc_reports_sales_custom() {
  *   uc_reports_sales_custom_form_submit()
  */
 function uc_reports_sales_custom_form($form_state, $values, $statuses) {
+  $timezone_offset = _uc_reports_timezone_offset();
   $form['search'] = array(
     '#type' => 'fieldset',
     '#title' => t('Customize sales report parameters'),
@@ -1075,18 +1089,18 @@ function uc_reports_sales_custom_form($form_state, $values, $statuses) {
     '#type' => 'date',
     '#title' => t('Start date'),
     '#default_value' => array(
-      'month' => format_date($values['start_date'], 'custom', 'n', 0),
-      'day' => format_date($values['start_date'], 'custom', 'j', 0),
-      'year' => format_date($values['start_date'], 'custom', 'Y', 0),
+      'month' => format_date($values['start_date'], 'custom', 'n', $timezone_offset),
+      'day' => format_date($values['start_date'], 'custom', 'j', $timezone_offset),
+      'year' => format_date($values['start_date'], 'custom', 'Y', $timezone_offset),
     ),
   );
   $form['search']['end_date'] = array(
     '#type' => 'date',
     '#title' => t('End date'),
     '#default_value' => array(
-      'month' => format_date($values['end_date'], 'custom', 'n', 0),
-      'day' => format_date($values['end_date'], 'custom', 'j', 0),
-      'year' => format_date($values['end_date'], 'custom', 'Y', 0),
+      'month' => format_date($values['end_date'], 'custom', 'n', $timezone_offset),
+      'day' => format_date($values['end_date'], 'custom', 'j', $timezone_offset),
+      'year' => format_date($values['end_date'], 'custom', 'Y', $timezone_offset),
     ),
   );
 
@@ -1154,9 +1168,8 @@ function uc_reports_sales_custom_form_submit($form, &$form_state) {
   $timezone_offset = _uc_reports_timezone_offset();
 
   // Build the start and end dates from the form.
-  $start_date = gmmktime(0, 0, 0, $form_state['values']['start_date']['month'], $form_state['values']['start_date']['day'], $form_state['values']['start_date']['year']);
-  $end_date = gmmktime(23, 59, 59, $form_state['values']['end_date']['month'], $form_state['values']['end_date']['day'], $form_state['values']['end_date']['year']);
-
+  $start_date = gmmktime(0, 0, 0, $form_state['values']['start_date']['month'], $form_state['values']['start_date']['day'], $form_state['values']['start_date']['year']) - $timezone_offset;
+  $end_date = gmmktime(23, 59, 59, $form_state['values']['end_date']['month'], $form_state['values']['end_date']['day'], $form_state['values']['end_date']['year']) - $timezone_offset;
   $args = array(
     $start_date,
     $end_date,
diff --git a/uc_reports/uc_reports.module b/uc_reports/uc_reports.module
index 9793356..6f1a503 100644
--- a/uc_reports/uc_reports.module
+++ b/uc_reports/uc_reports.module
@@ -294,14 +294,14 @@ function _uc_reports_get_sales($time, $period = 'day') {
 
   // Get the current date markers.
   $date = array(
-    'day' => format_date($time, 'custom', 'j', 0),
-    'month' => format_date($time, 'custom', 'n', 0),
-    'year' => format_date($time, 'custom', 'Y', 0),
+    'day' => format_date($time, 'custom', 'j', $timezone),
+    'month' => format_date($time, 'custom', 'n', $timezone),
+    'year' => format_date($time, 'custom', 'Y', $timezone),
   );
 
   // Add one to the granularity chosen, and use it to calc the new time.
   $date[$period] += 1;
-  $new_time = gmmktime(0, 0, 0, $date['month'], $date['day'], $date['year']);
+  $new_time = gmmktime(0, 0, 0, $date['month'], $date['day'], $date['year']) - $timezone;
 
   // Set up the default SQL for getting orders with the proper status
   // within this period.
@@ -386,22 +386,5 @@ function _uc_reports_end_interval($time, $interval = 'month') {
     $time = time();
   }
 
-  $temp = strtotime('+1 '. $interval, $time) - 1;
-
-  switch ($interval) {
-    case 'day':
-      $temp = gmmktime(0, 0, -1, gmdate('n', $time), gmdate('j', $time) + 1, gmdate('Y', $time));
-      break;
-    case 'week':
-      $temp = gmmktime(0, 0, -1, gmdate('n', $time), gmdate('j', $time) + 7, gmdate('Y', $time));
-      break;
-    case 'month':
-      $temp = gmmktime(23, 59, 59, gmdate('n', $time) + 1, 0, gmdate('Y', $time));
-      break;
-    case 'year':
-      $temp = gmmktime(23, 59, 59, gmdate('n', $time), 0, gmdate('Y', $time) + 1);
-      break;
-  }
-
-  return $temp;
+  return strtotime('+1 '. $interval, $time) - 1;
 }
diff --git a/uc_tax_report/uc_tax_report.module b/uc_tax_report/uc_tax_report.module
index 2e75887..aeeaec2 100644
--- a/uc_tax_report/uc_tax_report.module
+++ b/uc_tax_report/uc_tax_report.module
@@ -27,14 +27,18 @@ function uc_tax_report_menu() {
  * Display the sales tax report form and table.
  */
 function uc_tax_report_report_page($start_date = NULL, $end_date = NULL, $status = NULL) {
-  $timezone = _uc_reports_timezone_offset();
-  $timezone_offset = time() + $timezone;
+  // "Now" timestamp
+  $time = time();
+
+  // Site time minus GMT time, in seconds
+  $timezone_offset = _uc_reports_timezone_offset();
+
   $format = variable_get('uc_date_format_default', 'm/d/Y');
 
   // Use default report parameters if we don't detect values in the URL.
   if ($start_date == '') {
     $args = array(
-      'start_date' => gmmktime(0, 0, 0, gmdate('n', $timezone_offset), 1, gmdate('Y', $timezone_offset) - 1),
+      'start_date' => gmmktime(0, 0, 0, format_date($time, 'custom', 'n', $timezone_offset), 1, format_date($time, 'custom', 'Y', $timezone_offset) - 1) - $timezone_offset,
       'end_date' => time(),
       'status' => FALSE,
     );
@@ -191,6 +195,9 @@ function uc_tax_report_report_page($start_date = NULL, $end_date = NULL, $status
 function uc_tax_report_params_form($form_state, $values) {
   $form = array();
 
+  // Site time minus GMT time, in seconds
+  $timezone_offset = _uc_reports_timezone_offset();
+
   $form['params'] = array(
     '#type' => 'fieldset',
     '#title' => t('Customize tax report parameters'),
@@ -203,18 +210,18 @@ function uc_tax_report_params_form($form_state, $values) {
     '#type' => 'date',
     '#title' => t('Start date'),
     '#default_value' => array(
-      'month' => format_date($values['start_date'], 'custom', 'n', 0),
-      'day' => format_date($values['start_date'], 'custom', 'j', 0),
-      'year' => format_date($values['start_date'], 'custom', 'Y', 0),
+      'month' => format_date($values['start_date'], 'custom', 'n', $timezone_offset),
+      'day' => format_date($values['start_date'], 'custom', 'j', $timezone_offset),
+      'year' => format_date($values['start_date'], 'custom', 'Y', $timezone_offset),
     ),
   );
   $form['params']['end_date'] = array(
     '#type' => 'date',
     '#title' => t('End date'),
     '#default_value' => array(
-      'month' => format_date($values['end_date'], 'custom', 'n', 0),
-      'day' => format_date($values['end_date'], 'custom', 'j', 0),
-      'year' => format_date($values['end_date'], 'custom', 'Y', 0),
+      'month' => format_date($values['end_date'], 'custom', 'n', $timezone_offset),
+      'day' => format_date($values['end_date'], 'custom', 'j', $timezone_offset),
+      'year' => format_date($values['end_date'], 'custom', 'Y', $timezone_offset),
     ),
   );
 
@@ -264,8 +271,8 @@ function uc_tax_report_params_form_submit($form, &$form_state) {
   $timezone_offset = _uc_reports_timezone_offset();
 
   // Build the start and end dates from the form.
-  $start_date = gmmktime(0, 0, 0, $form_state['values']['start_date']['month'], $form_state['values']['start_date']['day'], $form_state['values']['start_date']['year']);
-  $end_date = gmmktime(23, 59, 59, $form_state['values']['end_date']['month'], $form_state['values']['end_date']['day'], $form_state['values']['end_date']['year']);
+  $start_date = gmmktime(0, 0, 0, $form_state['values']['start_date']['month'], $form_state['values']['start_date']['day'], $form_state['values']['start_date']['year']) - $timezone_offset;
+  $end_date = gmmktime(23, 59, 59, $form_state['values']['end_date']['month'], $form_state['values']['end_date']['day'], $form_state['values']['end_date']['year']) - $timezone_offset;
 
   $args = array(
     $start_date,
