这似乎是微不足道的。我想使用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

09-25 19:15