【发布时间】:2015-11-20 07:48:26
【问题描述】:
我有一个来自 Google Charts 的“时间线”图表。填充数据时需要 JavaScript Date 类型。
我的初始化代码是这样的:
var container = document.getElementById('divChart1');
var chart = new google.visualization.Timeline(container);
var dataTable = new google.visualization.DataTable();
dataTable.addColumn({ type: 'string', id: 'Name' });
dataTable.addColumn({ type: 'string', id: 'Category' });
dataTable.addColumn({ type: 'date', id: 'Start' });
dataTable.addColumn({ type: 'date', id: 'End' });
现在我正在尝试通过 AJAX 填充它,但 Date 类型给我带来了问题。
需要像这样填充行:
dataTable.addRows([
['Aaa', 'A', new Date(2014, 1, 1), new Date(2016, 12, 31)],
['Bbb', 'B', new Date(2014, 1, 1), new Date(2016, 5, 31)]]);
有什么方法可以从我的 AJAX 服务返回序列化集合并直接解析它,还是我需要每次迭代集合并更新 JavaScript 日期?
当我尝试dataTable.addRows(JSON.parse(result.chartData)); 时,我收到以下错误:Error: Type mismatch. Value 2015-08-26T11:59:23.889004+02:00 does not match type date in column index 2
出于信息目的,这是它在 AJAX 服务上的外观:
List<List<object>> chartData = new List<List<object>>();
chartData.Add(new List<object>() {
"Aaa",
"A",
DateTime.Now,
DateTime.Now.AddMonths(3)
});
return JsonConvert.SerializeObject(chartData);
编辑:好吧,我已经开始工作了。仍在调整,但这是要点:
chartData.Add(new List<object>() {
"Aaa",
"A",
DateTime.Now.Year + "#" + DateTime.Now.Month + "#" + DateTime.Now.Day,
DateTime.Now.AddMonths(3).Year + "#" + DateTime.Now.AddMonths(3).Month + "#" + DateTime.Now.AddMonths(3).Day
});
var result = $.parseJSON(result.chartData);
$.each(result, function (k, v) {
var s = v[2].split('#');
var e = v[3].split('#');
dataTable.addRow([v[0], v[1], new Date(s[0], s[1], s[2]), new Date(e[0], e[1], e[2])]);
});
不打算将其用作官方答案,因为它没有回答问题。
【问题讨论】:
-
你试过JSON日期格式吗?在 javascript 中,您可以通过
(new Date()).toJSON();获得它 -
当您
new Date(2014, 1, 1)时,您不是在剥离一天中的时间信息吗?您的测试用例使用DateTime.Now,其中包括一天中的时间。 -
@dbc,我只需要年/月/日。我以
DateTime.Now为例。我已尝试在服务器端格式化日期,但仍然存在问题。我想我本可以更清楚地说明这个问题,但我仍在考虑这个问题,更不用说试图解决它了
标签: javascript c# asp.net ajax json