2014-02-16 44 views
0

在通過「開始」時間顯示我的電話(Django的模型)的圖,在這裏我用Django的DateTimeField字段顯示正確的時區(JavaScript的)

{{ call.start|date:"H:i:s, m/d/Y" }} 

我得到正確的時區,例如23:36:34,02/15/2014。

但對於相同的呼叫,當我使用的是谷歌圖的曲線圖呼叫開始時間,下面的代碼放錯斌上述號召,計算的時間是4點36分34秒。

function drawChart2() { 
    var callArray = {{ calls|safe }}; 
    var calls = []; 
    calls[0] = ['Call', 'Time']; 
    for (var i = 1; i < callArray.length; i++) { 
     call_fields = callArray[i].fields; 
     if (call_fields.address != "") { 
      call_display = call_fields.address; 
     } 
     else { 
      call_display = call_fields.building; 
     } 
     if (call_fields.start != "") { 
      call_start = call_fields.start; 
     } 
     hour = parseInt(call_start.slice(11, 13), 10); 
     min = parseInt(call_start.slice(14, 16), 10); 
     sec = parseInt(call_start.slice(18, 20), 10); 
     if (hour == 5 && min == 0) 
      continue; 
     else 
      calls.push([call_display, hour + (1/60) * min + (1/3600) * sec]); 
    } 

    var time_data = google.visualization.arrayToDataTable(calls) 
    var options = { 
     title: 'Times of calls by hour', 
     legend: { position: 'none' }, 
    }; 

    var chart = new google.visualization.Histogram(document.getElementById('hist_div')); 
    chart.draw(time_data, options); 
    } 

任何想法如何獲得正確的時區?我的理由是因爲Django根據模板中瀏覽器的時區給出了時間,但是當我在JavaScript中使用它時,我只是直接從存儲方式(UTC)在JS變量中,Django無法動態修復顯示的時區。

+0

你提的兩個不同的上下文變量'call'和'調用',後者似乎是一個數組。 「{{calls | safe}}」的價值是什麼? – arocks

+0

調用是一個對象數組,對不起,如果這是令人困惑。這給出了一個電話字典,每個電話都有自己的字段。 – user2476581

回答

0

有一個更優雅的方式來調用列表傳遞給JavaScript。下面的代碼使用DjangoJSONEncoder它知道如何編碼的日期/時間對象正確:

import json 
from django.core.serializers.json import DjangoJSONEncoder 

calls = Call.objects.filter(something=something_else) # Assuming this is your calls object 

calls_json = json.dumps(list(calls), cls=DjangoJSONEncoder) 

在你的模板,你可以用它喜歡:

var callArray = {{ calls_json }}; 
+0

當我在我的視圖中這樣做時,我得到<我的調用對象的的TypeError不是JSON可序列化的。不過,我確實有一個調用對象的json方法..我可以在這裏使用它嗎? – user2476581

相關問題