问题描述
我正在尝试使用库d3根据日期从csv文件渲染图形。
我可以很容易地显示整个csv文件的图形,但是我想(使用下面的示例)仅显示例如六月的日期数据。
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中找到了完全随机的行,这些行根本不符合我的<=条件。
PS:为清楚起见,我简化了csv。 我的实际情况应该是在csv的末尾仅拾取2行,但是它从其余的csv中获得了数百行(但不是所有的行!!!!)。
知道发生了什么事吗?
1楼
使用d3.time.format()时需要注意。 在javascript中,当创建新的Date(yyyy,mm,dd)时,月份数可以从0到11。它们是从零开始的。 在d3.time.format()中,月份不是从零开始的(从1到12)。
解释应该是2015年5月15日为2015-06-14T23:00:00.000Z ...
不过这有点奇怪。 当我执行以下操作时,d3格式(如您所定义的)为我返回15/07/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中还有另一件事。 您可以了解更多信息。 但是,这有点陈旧,并且无法解释d3.time.format为什么会解释完全不同的内容。 您能否发布整个代码? 您在哪里注意到错误? 或您如何注意到?