这似乎是微不足道的。我想使用d3.time.scale()
来获取一个覆盖一定时间范围的均匀间隔日期的数组。例如,年份
[2012-01-01, 2013-01-01, 2014-01-01]
或几个月
[2012-01-01, 2012-02-01, 2012-03-01 ... 2014-12-01]
管他呢。
所以我开始像这样:
var t = d3.time.scale()
.domain(d3.extent(dates))
.nice(d3.time.year);
然后,我从documentation假设我可以做到这一点
var ticks = t.ticks(d3.time.month,1);
...但是那只会返回一个日期。
这给了我几个月的时间
var ticks = t.ticks(30)
...但仅是因为我大致告诉了要产生多少个滴答声,这是我事先不知道的(除非我自己做一些繁重的操作,否则会破坏使用d3的目的) 。
我不明白为什么只说每年,每个月,每三个月或其他任何事情对我来说是不可行的。
我在这里摆了一个小提琴:http://jsfiddle.net/herbcaudill/LgGpd/4/
最佳答案
使用Date()构造函数无法可靠地工作-基本上取决于浏览器。显式解析要安全得多。构造函数不会这样解析。
代替
var dates = getDates().map(function(d) { return new Date(d) });
用这个:
var dates = getDates().map(function(d) {
return d3.time.format("%Y-%m-%d").parse(d);
});
修改后的jsfiddle here。