如何使用d3.time.scale()生成一个间隔均匀的日期数组?

Her*_*ill 2 javascript arrays date d3.js

这似乎应该是微不足道的.我想用来d3.time.scale()获得一系列均匀分布的日期,这些日期涵盖了一定的时间范围.例如,年

 [2012-01-01, 2013-01-01, 2014-01-01]
Run Code Online (Sandbox Code Playgroud)

或几个月

 [2012-01-01, 2012-02-01, 2012-03-01 ... 2014-12-01]
Run Code Online (Sandbox Code Playgroud)

管他呢.

所以我从这样开始:

var t = d3.time.scale()
    .domain(d3.extent(dates))
    .nice(d3.time.year);
Run Code Online (Sandbox Code Playgroud)

然后我会从文档中假设我能够做到这一点

var ticks = t.ticks(d3.time.month,1);
Run Code Online (Sandbox Code Playgroud)

......但这只会返回一个日期.

这给了我几个月的数组

var ticks = t.ticks(30)
Run Code Online (Sandbox Code Playgroud)

...但只是因为我大致告诉它生成了多少个刻度(30),我事先不知道(除非我自己做了一些繁重的工作,哪种方式违背了使用d3的目的) .

我不明白为什么每年,每月,每3个月或其他任何事情只是告诉我我想要它.

我在这里竖起了一个小提琴:http://jsfiddle.net/herbcaudill/LgGpd/4/

Lar*_*off 5

使用Date()构造函数不能可靠地工作 - 它基本上取决于浏览器.明确解析更安全.构造函数不会这样解析.

代替

var dates = getDates().map(function(d) { return new Date(d) });
Run Code Online (Sandbox Code Playgroud)

用这个:

var dates = getDates().map(function(d) {
    return d3.time.format("%Y-%m-%d").parse(d);
});
Run Code Online (Sandbox Code Playgroud)

在这里修改了jsfiddle .