我正在尝试使用库 d3 根据日期从 csv 文件渲染图表。
我可以轻松显示整个 csv 文件的图表,但我想(使用下面的示例)仅显示 6 月份日期的数据。
csv文件如下:
date, close
15/06/15,200
15/06/15,250
10/06/15,300
05/06/15,500
25/05/15,200
20/05/15,100
好的,解析日期有效,我现在正在将日期与匹配的格式进行比较。尽管如此,有些事情还是没有道理。
d3.csv("txt.csv", function(error, data) {
data2 = data.filter(function(d) { return d.date <= timeFormat(parseDate("10/06/15")) });
data2.forEach(function(d) {
d.date = timeFormat(parseDate(d.date));
d.close = +d.close;
});
var timeFormat = d3.time.format("%d/%m/%y");
var parseDate = d3.time.format("%d/%m/%Y").parse;
当我console.log(data2);时我确实得到了一些数组,这意味着它正在找到一些行,问题是它从 csv 中找到完全随机的行,这些行根本不符合我的 <= 条件。
P.S.:为了清楚起见,我简化了 csv。我的真实情况应该只在 csv 末尾获取 2 行,但它从 csv 的其余部分获取数百行(但不是所有行!!!)。
知道发生了什么吗?
最佳答案
使用 d3.time.format() 时有一个警告。在 javascript 中,当创建一个新的 Date(yyyy, mm, dd) 时,月份的数字可以是从 0 到 11。它们是从零开始的。在 d3.time.format() 中,月份不是从零开始的(从 1 到 12)。
interpreting what should be 15/06/15 as 2015-06-14T23:00:00.000Z...
不过这有点奇怪。当我执行以下操作时,d3 格式(如您定义的那样)会在 2015 年 7 月 15 日返回:
var someDate = new Date(2015,06,15);
var var timeFormat = d3.time.format("%d/%m/%y");
console.log(timeFormat(someDate));
所以我实际上得到了我期望得到的东西。它不打印 2015-06-15T00:00:00 或类似的东西......
然后还有一件事是关于 javascript 中的日期的。您可以阅读更多相关信息here 。然而,它有点过时了,它并不能解释为什么 d3.time.format 会解释完全不同的东西。您可以发布整个代码吗?您在哪里注意到错误?或者你是怎么注意到的?
关于javascript - d3 选择 csv 文件的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455135/