在日期范围内查找丢失日期的最有效方法是什么
What is the most efficient way of finding missing dates within a daterange
假设我有一个N个日期的数组:
var dates = ['2013-01-01', '2013-01-02', '2013-01-05' ...]
找到第一次约会和最后一次约会之间所有丢失的日期最快的方法是什么?(假设日期是从最早到最晚排序的)。
间隙不一致,可能有任何大小。
我宁愿不使用任何库,只使用纯javascript。
通常,如果您有两个排序的数组,并且希望从另一个数组中找到缺失的项,则可以在parallel中对这两个数组进行迭代。我的解决方案与此类似,但使用了一个生成器日期数组:
function DateIterator(date){
this.current = date;
}
DateIterator.prototype.next = function() {
this.current.setDate(this.current.getDate() + 1);
return this.current.getFullYear() + '-' +
(this.current.getMonth()+1) + '-' +
this.current.getDate();
};
var dates = ['2013-1-1', '2013-1-2', '2013-1-5' ,'2013-2-2'];
var di = new DateIterator(new Date(dates[0]));
var date, missing = [];
for (var i=1; i<dates.length; i++) {
while ((date = di.next()) !== dates[i]) {
missing.push(date);
}
}
console.log(missing);
请注意,日期的检查是通过比较字符串值来完成的。next返回的日期不是0填充的,因此2013-01-01和2013-1-1之间的比较将失败。这可以通过制作一个更智能的比较函数来解决,但我认为这超出了问题的范围。
我会进行日期差异,并为任何丢失的日期生成新的日期,如下所示:
var dates = [new Date(2013,1,1), new Date(2013,1,2), new Date(2013,1,5)];
var missingDates = [];
for (var i = 1; i < dates.length; i++)
{
var daysDiff = ((dates[i] - dates[i - 1]) / 86400000) - 1;
for (var j = 1; j <= daysDiff; j++)
{
var missingDate = new Date(dates[i - 1]);
missingDate.setDate(dates[i - 1].getDate() + j);
missingDates.push(missingDate);
}
}
console.log(missingDates);
JSFiddle
相关文章:
- 如何在AngularJS中有效地检查日期是否有效
- 如何在javascript中将字符串转换为有效日期
- 在日期范围内查找丢失日期的最有效方法是什么
- 在JavaScript中使用date.parse时,包含有效日期的内容
- 如何测试字符串是否有效日期是否使用时刻
- 如何使用 Javascript 确定夏令时是否对给定日期和时区有效
- 日期差异在Firefox和IE中有效,但在Chrome中返回NaN
- 如何在 javascript 中以 YYYYDDMM 格式有效地获取三个月前的日期
- Dojo 网格:将过滤条件发送到服务器,具有有效日期
- 检查有效的日期选择器
- Javascript - 在 2 天有效之间获取多个日期条目(2 次)
- 检查日期在javascript中是否有效
- 使用 JavaScript 检查事件日期是否有效
- 这是在 JavaScript 中检查有效日期的好方法吗?
- 为什么2016年2月8888日是IE和Firefox的有效日期
- JavaScript-确保日期有效
- 根据日期有效地更改网站主体
- 如何在Bootstrap Datepicker中指定要有效的日期
- 与有效日期条目的每个阶段相匹配的日期的正则表达式
- Javascript方法,以确保日期有效