使用给定变量x返回在给定时间内等间隔的数组

时间:2016-12-11 11:55:52

标签: javascript d3.js

目前我的代码如下:

 var dateArray = d3.time.scale()
            .domain([new Date(2013, 1, 1), new Date(2013, 1, 7)])
            .ticks(d3.time.days, 1);

如果给出变量x,我怎么能在这两个日期之间返回一个等距日期的数组呢?即x = 10

1 个答案:

答案 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>