如何从 D3 轴获取当前刻度值的数量?

How do I get the current number of tick values from a D3 axis?

假设我有一些数据可以跨越 28-31 天。我不知道数据跨越多少天,但我知道开始和结束日期,我创建了一个 d3 时间尺度,使用这两个日期作为域。

如果我指定我想要每天 1 个刻度,有没有办法让轴达到 return 它将创建多少个刻度?

或者换句话说,是否有另一种方法可以确定 Javascript 两个日期范围内有多少天?

查看 d3.time.day。这就是 d3.time.scale 用来做 "time math" 的事情。很难弄清楚如何使用,但看起来有一种方法会 return 每天在两个日期之间(表示为每天午夜的 Date 对象)。

例如,这是从 1 月 24 日到现在经过的天数:

d3.time.day.range(new Date(2015,0,24), new Date())
/* returns
[
  Sat Jan 24 2015 00:00:00 GMT-0500 (EST),
  Sun Jan 25 2015 00:00:00 GMT-0500 (EST), 
  Mon Jan 26 2015 00:00:00 GMT-0500 (EST), 
  ...
  Tue Feb 03 2015 00:00:00 GMT-0500 (EST),
  Wed Feb 04 2015 00:00:00 GMT-0500 (EST)
]
*/

那么你可以取那个数组的 .length 就可以了...还有计算小时数、周数、月数等的等效函数。

也许还有一种方法可以只获取天数 — 而无需生成实际的日期数组 — 但我找不到。