我正在尝试编写一个函数,该函数返回一组与这些日期相关的同等分块日期和天数。如果有剩余的那些日子,它们会被附加到数组中,如下所示。
预期结果:
[{
'startDate' : 20160719 //dates generated from momentjs
'numOfDays': 5
},{
'startDate' : 20160724
'numOfDays': 5
},{
'startDate' : 20160729
'numOfDays': 3
}]
以下是我编写的函数,您可以在其中传递开始日期(momentjs),总天数(daysToDisplay)和除以(numOfDays)的天数。
function buildQueue(startDate, numOfDays, daysToDisplay) {
if (!startDate || !numOfDays || !daysToDisplay) {
throw new Error('All params required!');
}
var num = numOfDays > daysToDisplay ? daysToDisplay : numOfDays;
var div = Math.floor(daysToDisplay / num);
var count = daysToDisplay;
var rem = daysToDisplay % num;
var lastItem;
var i;
var arr = [];
for (i = 0; i <= daysToDisplay; i += num) {
arr.push({
startDate: moment(startDate, 'YYYYMMDD').add(i, 'days').format('YYYYMMDD'),
numOfDays: numOfDays,
count: i
})
if (rem === count) {
break;
}
count -= num;
}
if (count > 0) {
lastItem = arr[arr.length - 1];
var leftover = daysToDisplay - lastItem.count;
arr.push({
startDate: moment(lastItem.startDate, 'YYYYMMDD').add(num, 'days').format('YYYYMMDD'),
numOfDays: rem,
count: leftover + lastItem.count
});
}
return arr;
}
这里有一个工作示例(https://jsfiddle.net/zv5ghqpa/1/)。该代码似乎适用于daysToDisplay可分割超过2的情况。
当daysToDisplay只能被一个分割时,我们在返回的数组中得到一个额外的项目,主要是由于for循环中的零索引。如果我调用buildQueue(&#39; 20160719&#39;,5,8),预期的结果应该是:
[{
'startDate': 20160719
'numOfDays': 5
}, {
'startDate': 20160724
'numOfDays': 3
}]
而是返回:
[{
'startDate': 20160719
'numOfDays': 5
},{
'startDate': 20160724
'numOfDays': 5
}, {
'startDate': 20160729
'numOfDays': 3
}]
我希望我已经提供了足够的信息......这真的是我的目标。
提前致谢!
答案 0 :(得分:0)
我认为这是您正在寻找的代码:
m = size(P, 1);
n = size(R, 1);
C = false(m, n);
for i=1:n
C(:, i) = (P(:, 1)>=R(i, 1))&(P(:, 1)<=R(i, 3))& ...
(P(:, 2)>=R(i, 2))&(P(:, 2)<=R(i, 4));
end
答案 1 :(得分:0)
在编辑问题之前,我认为'预期结果'是正确的。我还注意到示例代码生成了一个count
属性,您不希望在输出中使用该属性。
也许这段代码可以满足您的需求?
function buildQueue(startDate, numOfDays, daysToDisplay) {
var arr = []
while (daysToDisplay > 0) {
arr.push({
startDate: moment(startDate, 'YYYYMMDD')
.add(numOfDays * arr.length, 'days')
.format('YYYYMMDD'),
numDays: Math.min(numOfDays, daysToDisplay)
})
daysToDisplay -= numOfDays
}
return arr
}