我试图解析一个c#DateTime对象,从我的控制器以Json的形式返回到适当的javascript日期格式,以输入到D3js。
在我的控制器中,我现在返回一些随机值:
[HttpGet]
public ActionResult DataBlob()
{
var list = new List<object>();
var rnd = new Random();
var start = DateTime.Now.AddDays(-30);
var range = (DateTime.Today - start).Days;
for (int i = 0; i < 10; i++)
{
list.Add(new TrendData
{
Depth = rnd.Next(i, 100),
Id = i,
Speed = rnd.Next(i, 100),
Time = start.AddDays(rnd.Next(range)),
Weight = rnd.Next(i, 100)
});
}
return Json(list, JsonRequestBehavior.AllowGet);
}
在我看来,我有d3组件用d3.json(..)获取数据:
...
var parseDate = d3.time.format("%Y%m%d").parse;
...
d3.json('@Url.Action("DataBlob", "Trend")', function (error, data) {
color.domain(d3.keys(data[0]).filter(function (key) { return key !== "Time"; }));
data.forEach(function (d) {
console.log("Before: " + new Date(parseInt(d.Time.substr(6))));
tmp = new Date(parseInt(d.Time.substr(6)));
d.Time = parseDate(tmp);
console.log("After: " + d.Time);
});
}
这是我在json电话中给出的数组的快照:
检查控制台时,我在console.log语句中看到以下内容:
Before: Thu Mar 13 2014 10:53:17 GMT+0100 (W. Europe Standard Time)
后面是这个错误:
Uncaught TypeError: Object [object Date] has no method 'substring'
我希望有人可以帮我正确地解析这些日期,因为我似乎无法弄明白。
答案 0 :(得分:0)
从此comment已经回答了它,
的结果
tmp = new Date(parseInt(d.Time.substr(6)));
是Date
对象,它不需要进一步解析。你可能想要格式化,所以
var parseDate = d3.time.format("%Y%m%d")
根据documentation,您可能想要重命名该变量。