【发布时间】:2014-04-10 08:53:54
【问题描述】:
我正在尝试将一个 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'
我希望有人可以帮助我正确解析这些日期,因为我似乎无法弄清楚。
【问题讨论】:
-
tmp = new Date(parseInt(d.Time.substr(6)));的结果是一个 Date 对象,不需要进一步解析。不过,您可能需要格式化,所以var parseDate = d3.time.format("%Y%m%d")according do the documentation,所以您可能需要重命名该变量。 -
啊,谢谢。我怎么能错过呢? :$ 随意添加它作为我接受的答案!
-
天堂禁止!! RTFM 得分? ;-)
-
哈哈 :) 好点。我想我还是误解了它:)下次必须更仔细地阅读它;)
标签: c# javascript json d3.js