日期范围是否包含两个特定日期
Does a date range contain two specfic days
我正在使用moment.js,并试图弄清楚所提供的日期范围是否至少包括一整周,而周的定义是包括周一到下周日。
例如。如果日期范围包括周三到周三,我需要返回false
,因为它没有周一到周日的样本。
然而,星期四到下一个星期一也可以,因为它包括一个完整的星期一->星期日周期。
我有一个简单的日期对象
Object {
start: "2014-03-31T13:00:00.000Z",
end: "2014-04-09T13:59:59.999Z"
}
但我真的不确定从哪里开始。
该项目使用的是moment.js,但如果有一个使用直接javascript日期对象的更简单的解决方案,我可以接受。
如果没有moment.js,这可能是一个想法:
//assuming you have an object like
// { start: [a date object], end: [a date object] }
// create a range (getDates.call([the assumend object]);
function getDates() {
var dates = [{date: this.start, day: this.start.getDay()}]
,current = new Date(this.start);
while (current < this.end) {
var next = new Date(current.setDate(current.getDate()+1));
dates.push( {date: current, day: current.getDay()} );
current = next;
}
return dates;
}
// assuming you have a range, check if the range
// contains a full week
// (containsFullweek.call([the range]))
function containsFullweek() {
return this.length>6 &&
this.filter(
function (v) { return v.day == 0 || v.day == 1})
.length>=2;
}
// the sunday after a monday modification
function containsFullweek() {
var mondays = this.range.filter(function (v) { return v.day == 1; })
,nextsundays = this.range.filter(
function(v) {return v.day==0 && v.date>this[0].date}, mondays);
return nextsundays.length>0;
}
在jsFiddle中完成
换句话说:创建一个对象数组[范围],其中包含从开始日期到结束日期的所有日期,数组中的每个对象都存储该日期和该日期的工作日。通过检查[范围]中是否至少有七个日期来检查该范围是否包含完整的一周,如果该范围包含星期日(0)或星期一(1),则检查(多余)。
这就是我想到的。我检查星期一是否发生在星期天之前,如果不是,则返回false
// check that a valid week range has been provided for showing Daily Profile
function validWeekRange(){
var day = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var diffDays = Math.round(Math.abs((new Date($scope.date.start).getTime() - new Date($scope.date.end).getTime())/(day)));
if(diffDays >= 13){
return $scope.validWeek=true;
}
//if we got here, this date range is possibly invalid
var mondayToSunday=[];
var checkDate = new Date();
var startDate = new Date($scope.date.start).getDate();
//run through each day. the monday comes first, so if a monday is not in Monday to sunday, don't add the sunday.
for(var i=0; i<diffDays; i++){
checkDate.setDate(startDate+1);
if(checkDate.getDay()===1){
mondayToSunday.push(i);
}
if(checkDate.getDay()===0 && mondayToSunday.length>0){
mondayToSunday.push(i);
}
}
$scope.validWeek = !mondayToSunday.length <= 1;
}
相关文章:
- 如何在AngularJS中有效地检查日期是否有效
- 检查日期是否为周末javascript
- 我怎么知道日期是否是星期六
- 检查html日期是否为>现在
- 如何创建一个函数来检查日期是否为回文
- 检查开始日期是否小于结束日期(不使用任何pluguin)
- 如何在javascript中检查日期是否在本周、本月或下个月内
- 验证日期是否早于当前日期的日期
- 如何在不包括当前日期的情况下检查日期是否不是过去
- 如何测试字符串是否有效日期是否使用时刻
- 检查日期是否大于一个月的第一个周结束日期
- 检查日期是否在过去,无需提交表格
- 角度JS比较两个日期是否相等
- 比较JavaScript中的两个mill i秒,以确定日期是否相同
- 捕获“无效日期”是否安全
- 如何使用 JavaScriptJQuery 检查一个日期是否在另一个日期之前
- 使用 JavaScript 检查事件日期是否有效
- 检查输入日期是否在给定范围内
- 项目日期是否在今天的5天内's日期
- 在javascript中检查输入的日期是否为18年和天数