Dut*_*evv 6 javascript date momentjs
假设您有一系列日期范围
var arr = [
{
"from": 'unix 1st of august',
"until": 'unix 5th of august'
},
{
"from": 'unix 15th of august',
"until": 'unix 20th of august'
},
{
"from": 'unix 25th of august',
"until": 'unix 31th of august'
}
];
Run Code Online (Sandbox Code Playgroud)
在时间范围内找到“漏洞”的最简单方法是什么?在这种情况下,第 5 日到 15 日以及第 20 日到 25 日缺失。
function findDateRangeHoles() {
let chunks = [];
arr.forEach(range => {
// ??
chunks.push({from: '?', until: '?'});
});
// Return value example, array of object, each holding a missing date range chunk
[
{
from: 'unix 5th of august',
until: 'unix 15th of august'
},
{
from: 'unix 20th of august',
until: 'unix 25th of august'
}
]
return chunks;
}
let missingChunks = findDateRangeHoles(1st of August, 31 of August); // Array of objects
Run Code Online (Sandbox Code Playgroud)
不知道 momentjs 有什么用吗?
这是一个例子,但是以后,您应该发布真实的尝试,您发布的内容并不表明您已经尝试过。
对它们进行排序,并将范围 a 的末尾与范围 b 的开头进行比较(以数字形式表示)。执行此操作后,将您创建的起始日期和截止日期转换为日期范围
// Assuming they are sorted
var ranges = [{
from: 946702800, // +new Date(2000, 0, 1) / 1000
until: 949381200 // +new Date(2000, 1, 1)
},{
from: 954565200,
until: 957153600
},{
from: 962424000,
until: 965102400
}];
var holes = [];
for (var i=1; i < ranges.length; i++) {
var beginningOfHole = ranges[i-1].until;
var endOfHole = ranges[i].from;
if (beginningOfHole < endOfHole) {
holes.push({from: beginningOfHole + 1, until: endOfHole - 1});
}
}
console.log('holes in ranges', holes.map(hole => ({
from: new Date(hole.from * 1000), // Convert unix timestamp into JS timestamp
until: new Date(hole.until * 1000)
})));Run Code Online (Sandbox Code Playgroud)