2014-02-16 40 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

相关问题