在视图中按“开始”时间显示我的调用(Django模型),我使用
{{ call.start|date:"H:i:s, m/d/Y" }}
我得到了正确的时区,例如23:36:34,02/15/2014。
但是对于同一个电话,当我使用Google图表来设置呼叫开始时间时,以下代码将上述呼叫置于错误的bin中,计算的时间为04: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 :(得分: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 }};