Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/model/ajax.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/model/ajax.py	(revision 39761)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/model/ajax.py	(working copy)
@@ -29,12 +29,13 @@
 from djproject.an_settings import TEST_IP_POOL, DIR_STR, MAX_FILES_COUNT, RRDCACHED_SOCKET
 from django.utils.translation import ugettext_lazy as _
 from djproject.an_settings import GRAPH_DB_FILE_LIST
-from hive.utils import escapehtml 
+from hive.utils import escapehtml
 import sqlite3, re
 import traceback
+from datetime import datetime, timedelta
 
 TIMEFORMAT='%Y-%m-%d %X'
-        
+
 def main():
     pass
 
@@ -1024,16 +1025,20 @@
             field_sum += 1
         last_value = [0] * field_sum
 
-        start = int(kwargs['start_time'])
-        end = int(kwargs['end_time'])
-        end_time = time.time() + end
-        if not start:
-            start_time = end_time - 1800.0
-        else:
-            start_time = time.time() + start
-        ret['start_time'] = time.strftime(TIMEFORMAT, time.localtime(start_time))
-        ret['end_time'] = time.strftime(TIMEFORMAT, time.localtime(end_time))
-        
+        start_time = int(kwargs['start_time']) # UTC+0 timestamp
+        end_time = int(kwargs['end_time']) # UTC+0 timestamp
+        timezone_offset = int(kwargs.get('timezone_offset', 0))
+        if not end_time:
+            end_time = int(time.time())
+        if not start_time:
+            start_time = end_time - 1800
+        start_dt = datetime.utcfromtimestamp(start_time)
+        end_dt = datetime.utcfromtimestamp(end_time)
+        start_diff = start_dt + timedelta(minutes=-timezone_offset)
+        end_diff = end_dt + timedelta(minutes=-timezone_offset)
+        ret['start_time'] = start_diff.strftime(TIMEFORMAT)
+        ret['end_time'] = end_diff.strftime(TIMEFORMAT)
+
         if "LLBLinkRoute" in self.request.path_info:
             need_db_list = ["storemon_1.db"]
             start_db = "storemon_1.db"
@@ -1078,11 +1083,11 @@
                             data_name += '('+ unicode(field_obj.unit_name) + ')'
                         ret['data_name'].append(data_name)
                         ret['data'].append([])
-                    
+
                     model_list = instance._meta._model._meta.path
                     table_name = model_list[-1]
                     table_name, where_str, instance_str = self.get_sql_select_info(table_name, instance)
-                    
+
                     if start_db == end_db:
                         cmd += " from " + table_name + where_str + instance_str +"' and time > " + str(int(start_time)) + " and time < " + str(int(end_time)) + " group by timef"
                     elif each_db == start_db:
@@ -1111,7 +1116,6 @@
                                     ret['error'] = unicode(_('database is locked.'))
                                     return json.dumps(ret)
                     result = db.fetchall()
-                    tmp_data = []
                     result_len = len(result)
                     for index, each in enumerate(result):
                         time_str = time.strftime(TIMEFORMAT, time.localtime(each[0]))
@@ -1486,26 +1490,29 @@
         keys = json.loads(kwargs['keys'])
         field_sum = 1
         last_time = ''
-        
+
         ret = {}
         if 'key' in kwargs:
             ret['key'] = kwargs['key']
         for field in keys['field']:
             field_sum += 1
         last_value = [0] * field_sum
-        start = int(kwargs['start_time'])
-        end = int(kwargs['end_time'])
-
-        end_time = time.time() + end
-        if not start:
+        start_time = int(kwargs['start_time']) # UTC+0 timestamp
+        end_time = int(kwargs['end_time']) # UTC+0 timestamp
+        timezone_offset = int(kwargs.get('timezone_offset', 0))
+        if not end_time:
+            end_time = int(time.time())
+        if not start_time:
             start_time = end_time - 1800
-        else:
-            start_time = time.time() + start
-        ret['start_time'] = time.strftime(TIMEFORMAT, time.localtime(start_time))
-        ret['end_time'] = time.strftime(TIMEFORMAT, time.localtime(end_time))
+        start_dt = datetime.utcfromtimestamp(start_time)
+        end_dt = datetime.utcfromtimestamp(end_time)
+        start_diff = start_dt + timedelta(minutes=-timezone_offset)
+        end_diff = end_dt + timedelta(minutes=-timezone_offset)
+        ret['start_time'] = start_diff.strftime(TIMEFORMAT)
+        ret['end_time'] = end_diff.strftime(TIMEFORMAT)
         ret['data'] = []
         ret['data_name'] = []
-        
+
         if "LLBGlobalStatistics" in self.request.path_info:
             need_db_list = ["storemon_1.db"]
             start_db = "storemon_1.db"
@@ -1513,12 +1520,12 @@
         else:
             db_info = get_need_db_list(start_time, end_time)
             if db_info is None:
-                ret['error'] = unicode(_('Fail to query the data.')) 
+                ret['error'] = unicode(_('Fail to query the data.'))
                 return json.dumps(ret)
             start_db = db_info['start_db']
             end_db = db_info['end_db']
             need_db_list = db_info['need_db_list']
-            
+
         for each_db in need_db_list:
             db_file_exist = os.path.isfile(GRAPH_DB_FILE_LIST+each_db)
             if db_file_exist:
@@ -1603,7 +1610,6 @@
                                 return json.dumps(ret)
                 result = db.fetchall()
                 conn.close()
-                tmp_data = []
                 result_len = len(result)
                 for index, each in enumerate(result):
                     time_str = time.strftime(TIMEFORMAT, time.localtime(each[0]))
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/media/js/coffee/chart.coffee
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/media/js/coffee/chart.coffee	(revision 39761)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/media/js/coffee/chart.coffee	(working copy)
@@ -341,21 +341,21 @@
         if localStorage.theme == "New"
             @options.grid.background = "#0f1b29"
         @options = dict_merge(@options, custom_options)
-        
+
         @data = ''
-        @time_end = 0
-        @time_start = 0
+        @time_end = Math.floor(Date.now() / 1000)
+        @time_start = @time_end - 1800
+        @timezone_offset = new Date().getTimezoneOffset()
         @data_min = 0
         @data_max = null
         @plot = ''
 
-        # if use ajax to get data 
+        # if use ajax to get data
         @ajax_url = null
         @auto_update_time = 0
         @_old_value = 1
         @_zoomed = false
         @timer = ''
-        
 
     draw: =>
         if @ajax_url
@@ -364,11 +364,13 @@
                     start_time: 0 - @auto_update_time*2
                     end_time: 0
                     key:@_old_value
+                    timezone_offset: @timezone_offset
             else
                 option_data = 
                     start_time: @time_start
                     end_time: @time_end
                     key:@_old_value
+                    timezone_offset: @timezone_offset
             $.ajax
                 async: true
                 url: @ajax_url
@@ -430,6 +432,7 @@
                 start_time: @time_start
                 end_time: @time_end
                 key:1
+                timezone_offset: @timezone_offset
             $.ajax
                 async: true
                 type: "POST"
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/media/js/coffee/widget-statistics.coffee
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/media/js/coffee/widget-statistics.coffee	(revision 39761)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/media/js/coffee/widget-statistics.coffee	(working copy)
@@ -418,16 +418,16 @@
             if timer
                 clearInterval(timer)
                 timer = null
-            
-            start = moment(start_time, "YYYY-MM-DD HH:mm").unix() - moment().unix()
-            end = moment(end_time, "YYYY-MM-DD HH:mm").unix() - moment().unix()
+
+            start = moment(start_time, "YYYY-MM-DD HH:mm").unix()
+            end = moment(end_time, "YYYY-MM-DD HH:mm").unix()
             chart.time_start = parseInt(start, 10)
             chart.time_end = parseInt(end, 10)
             if $("#auto_refresh_#{ id }").is(":checked")
                 chart.auto_update_time = 10
-            else 
+            else
                 chart.auto_update_time = 0
-            
+            chart.timezone_offset = new Date().getTimezoneOffset()
             chart.clear()
             chart.draw()
             $("#time_control_#{ id }").collapse("hide")
@@ -628,14 +628,15 @@
                     clearInterval(timer)
                     timer = null
 
-                start = moment(start_time, "YYYY-MM-DD HH:mm").unix() - moment().unix()
-                end = moment(end_time, "YYYY-MM-DD HH:mm").unix() - moment().unix()
+                start = moment(start_time, "YYYY-MM-DD HH:mm").unix()
+                end = moment(end_time, "YYYY-MM-DD HH:mm").unix()
                 @time_start = parseInt(start, 10)
                 @time_end = parseInt(end, 10)
                 if $("#auto_refresh_#{ @id }").is(":checked")
                     @auto_update_time = @auto_update_time_config
-                else 
+                else
                     @auto_update_time = 0
+                @timezone_offset = new Date().getTimezoneOffset()
 
                 @clear()
                 @draw()
