给定所需日期的计数,获取两个日期之间线性分布的日期数组 - 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() });
}
其中 startDate
和 endDate
是 Date 对象。
请注意,该函数将 return 一个长度为 steps+1
的数组。因为从我的角度来看,这是合乎逻辑的。例如,如果您希望从 12 点到 14 点 一步,我希望结果类似于 [12oclock, 14oclock]
.
假设我有日期:
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() });
}
其中 startDate
和 endDate
是 Date 对象。
请注意,该函数将 return 一个长度为 steps+1
的数组。因为从我的角度来看,这是合乎逻辑的。例如,如果您希望从 12 点到 14 点 一步,我希望结果类似于 [12oclock, 14oclock]
.