我正在使用moment.js并且我试图弄清楚提供的日期范围是否至少包括整周,其中一周的定义是它包括星期一到下一个星期日。
例如。如果日期范围包括星期三到星期三,我需要返回false
,因为它没有星期一到星期日的样本。
然而,星期四到下一个星期一会很好,因为它包括一个完整的星期一 - >周日周期。
我有一个简单的约会对象
Object {
start: "2014-03-31T13:00:00.000Z",
end: "2014-04-09T13:59:59.999Z"
}
但我不确定从哪一开始。
该项目正在使用moment.js,但如果使用直接的javascript日期对象有一个更简单的解决方案,我也可以。
答案 0 :(得分:1)
没有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),则检查(冗余)。
答案 1 :(得分:0)
这就是我想出的。我检查星期一是在星期日之前发生的,如果不是
则返回假 // 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;
}