Javascript 使用Date()对象数组创建X轴-D3.js

Javascript 使用Date()对象数组创建X轴-D3.js,javascript,d3.js,Javascript,D3.js,我有一个javascript格式的日期数组: dates = [Fri Jan 02 2015 00:00:00 GMT-0600 (CST), Mon Jan 05 2015 00:00:00 GMT-0600 (CST), Tue Jan 06 2015 00:00:00 GMT-0600 (CST), Wed Jan 07 2015 00:00:00 GMT-0600 (CST), Thu Jan 08 2015 00:00:00 GMT-0600 (CST), Fri Jan

我有一个javascript格式的日期数组:

dates = [Fri Jan 02 2015 00:00:00 GMT-0600 (CST), 
Mon Jan 05 2015 00:00:00 GMT-0600 (CST), 
Tue Jan 06 2015 00:00:00 GMT-0600 (CST), 
Wed Jan 07 2015 00:00:00 GMT-0600 (CST), 
Thu Jan 08 2015 00:00:00 GMT-0600 (CST), 
Fri Jan 09 2015 00:00:00 GMT-0600 (CST), …]
还有更多的约会。我可以根据需要解析它们-在D3.js中,或者将它们保存在这个
Date()
格式中。我希望我的时间刻度x轴上只有这些日期的刻度(注意它们跳过周末和假日)。这在D3中可能吗?我现在试过了

 timeScale = d3.time.scale()
  .domain(dates)
  .range([0, width])
  .clamp(true);

但这不起作用。使用
.domain([minDate,maxDate])
有效,但包括周末和假日

简短的回答似乎是“不”,这是不可能的,因为
d3.time.scale()
的设计并没有考虑到这一点

根据博斯托克(d3的创建者)的说法:

当您希望将时间显示为连续的定量变量时,应使用d3.time.scale,例如,当您希望考虑到由于夏时制的变化,天数可能在23-25小时之间,而由于闰年,年份可能在365-366天之间。 如果您不想绘制连续时间,以及我们正常日历单位中的所有不规则情况,那么您可能不想使用d3.time.scale,而是希望使用d3.scale.linear

因此,在您的情况下,更好的方法是创建一个线性比例,并像这样映射您的日子:

Fri Jan 02 --> 1
Mon Jan 05 --> 2
Tue Jan 06 --> 3
Wed Jan 07 --> 4
Etc...
另外,您可能想看看这个来自Bostock的实现,它在工作日数字和日期之间进行转换(我从未尝试过):


太好了-谢谢。结论性的答案,只需要使用一个有序的尺度。首先尝试一个线性尺度。有趣的事情可以按顺序发生。