给定所需日期的计数,获取两个日期之间线性分布的日期数组 - javascript、d3.js、moment.js

Get linearly spread array of dates between two dates, given count of desired dates - javascript, d3.js, moment.js

假设我有日期:

Mon Mar 31 2014 05:42:35 GMT+0200 (CEST)

Wed Sep 02 2015 10:29:38 GMT+0200 (CEST)

totalNumberOfDates = 37;

我想要获得 37 个日期的数组(第一个和最后一个日期应该是上面的日期),它们在给定日期之间完全线性分布。

我希望在 D3.js 或 moment.js

中提供优雅的解决方案

    var getMySpecialDates = function(d1,d2,r){
    d1 =  new Date(d1);
    d2 =  new Date(d2);
    var time = (d2.getTime()-d1.getTime())/(r);
    time = Math.floor(time);
    var temp = d1;
    var result = new Array()
    while(temp.getTime()<=(d2.getTime())){
        var f  = new Date(temp);
          result.push(f);
          temp.setTime(temp.getTime()+time);
          }
    return result;
}
var dates = getMySpecialDates("Mon Mar 31 2014 05:42:35 GMT+0200 (CEST)", "Wed Sep 02 2015 10:29:38 GMT+0200 (CEST)", 37);
console.log("Total Dates: " + dates.length);
for(var i=0;i<dates.length;i++){
console.log((dates[i]).toString());
}

function getDateRange(startDate, endDate, steps)
{
    var stepSize = (endDate - startDate) / steps;
    return d3.range(steps + 1).map(function(i){ return moment(startDate).add(stepSize * i, 'ms').toDate() });
}

其中 startDateendDateDate 对象。

请注意,该函数将 return 一个长度为 steps+1 的数组。因为从我的角度来看,这是合乎逻辑的。例如,如果您希望从 12 点到 14 点 一步,我希望结果类似于 [12oclock, 14oclock].