目前我的代码如下:
var dateArray = d3.time.scale()
.domain([new Date(2013, 1, 1), new Date(2013, 1, 7)])
.ticks(d3.time.days, 1);
如果给出变量x,我怎么能在这两个日期之间返回一个等距日期的数组呢?即x = 10
答案 0 :(得分:3)
从您的时间刻度中删除ticks
:
var dateArray = d3.time.scale()
.domain([new Date(2013, 1, 1), new Date(2013, 1, 7)]);
并将其与x
变量一起使用:
var x = 10;
var spacedDates = dateArray.ticks(x);
根据文档,ticks()
:
从比例的输入域返回代表日期。返回的滴答日期是均匀间隔的(模数不规则的时间间隔,例如月和闰年),具有人类可读的值(例如中午),并且保证在输入域的范围内。
但是,数组的长度不一定是您传递给ticks
的数字:
如果count是一个数字,那么将返回大约计数滴答。 (强调我的)
这是一个演示:
var dateArray = d3.time.scale()
.domain([new Date(2013, 1, 1), new Date(2013, 1, 7)]);
var x = 10;
var spacedDates = dateArray.ticks(x);
console.log(spacedDates);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
编辑:要获取完全的日期数,您可以使用invert()
并填充自己的数组:
for(var i = 0; i<x; i++){
spacedDates.push(dateArray.invert(i));
}
查看演示:
var x = 10;
var dateArray = d3.time.scale()
.domain([new Date(2013, 1, 1), new Date(2013, 1, 7)])
.range([0, x-1]);
var spacedDates = [];
for(var i = 0; i<x; i++){
spacedDates.push(dateArray.invert(i));
}
console.log(spacedDates);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>