Javascript 在angularjs中,如何计算两个日期之间的天数(周末除外)?

Javascript 在angularjs中,如何计算两个日期之间的天数(周末除外)?,javascript,angularjs,date,Javascript,Angularjs,Date,在我的应用程序中,我有两个日期选择器作为开始日期和结束日期。当用户选择开始和结束日期时,系统将显示两个日期之间的日期,但不包括周六和周日。如何使用angularjs计算它?做了如下工作: var startDate = new Date("01-10-2020"); var endDate = new Date("01-20-2020"); var nextDay = new Date(startDate); var cnt = 0; do { /*if (nextDay.getDay(

在我的应用程序中,我有两个日期选择器作为开始日期和结束日期。当用户选择开始和结束日期时,系统将显示两个日期之间的日期,但不包括周六和周日。如何使用angularjs计算它?

做了如下工作:

var startDate = new Date("01-10-2020");
var endDate = new Date("01-20-2020");
var nextDay = new Date(startDate);
var cnt = 0;
do {
    /*if (nextDay.getDay() >= 1 && nextDay.getDay() <= 5) {
        cnt = cnt + 1;
    }*/
    cnt += (nextDay.getDay() >= 1 && nextDay.getDay() <= 5) ? 1 : 0;
    nextDay.setDate(nextDay.getDate() + 1);
} while (nextDay <= endDate);
console.log("Number of week days between " + startDate + " and " + endDate + " = " + cnt);
var startDate=新日期(“01-10-2020”);
var endDate=新日期(“01-20-2020”);
var nextDay=新日期(起始日期);
var-cnt=0;
做{

/*如果(nextDay.getDay()>=1&&nextDay.getDay()=1&&nextDay.getDay()您不希望每天都进行昂贵的循环,以查看是周六还是周日。逻辑应如下所示:

  • 在UTC工作,因此我们不需要担心时区
  • 计算日历周总数。在单个日历周中,保证有5个工作日(非周末==周六|周日)
  • 计算剩余天数。这将在以后添加到计算中
  • 确定“最终调整”的方法是查看剩余调整是否在周末进行
  • 工作日数为(5*numweek)+剩余天数+最终天数
(函数(){
“严格使用”;
var SUN=0;
var-MON=1;
var-TUE=2;
var=3;
var-THU=4;
var-FRI=5;
var-SAT=6;
函数isWeekendDay(天){
返回日===周六|日===太阳;
}
功能编号工作日(开始、结束){
var numCalendarDays=(结束-开始)/1000/60/60/24;
var numWeeks=数学楼层(numCalendarDays/7);
//添加到完整日历数上的可能天数
//周。这将由“finalAdjust”调整
var remainderDays=numCalendarDays%7;
//对周末开始和结束日期的调整
// ----------------------------
//从1开始,因为同一天应计为1
//但根据计算,同一天之间的天数为0
//上面的算术。
//如果不希望包含结束日期,请将此更改为0。。。
var finalAdjust=1;
var startDay=start.getUTCDay();
var endDay=end.getUTCDay();
//在周末,通过减去1进行调整
如果(isWeekendDay(startDay)){
最后只是--;
}
//在周末,通过减去1进行调整
如果(周末(结束日)){
最后只是--;
}
//这意味着在开始工作时要减去一个额外的周末
//周末开始时(如周六至周一)
//根据周模块划分(mod 7),结束日也不能在周末
如果(开始日期===周六和剩余天数>2){
最后只是--;
}
// ---------------------------
//每个完整日历周有5个工作日
//将该数字与上述剩余天数和最终天数一起使用
//得出答案。
var numWeekDays=(5*numWeeks)+剩余天数+最终天数;
返回numweekday;
}
//测试用例
//假设开始日期和结束日期包含在内
//2020-01-01至2020-01-01为一天
//2020-01-01到2020-01-02是两天
// ----------------------
//星期三
风险值开始=新日期(“2020-01-08”);
//星期六
var结束=新日期(“2020-02-01”);
//预期答复:18
日志(numberWeekDays(开始、结束));
//星期六
开始=新日期(“2020-01-05”);
//星期一
结束=新日期(“2020-01-31”);
//预期答复:20
日志(numberWeekDays(开始、结束));
//工作日至工作日星期二至
开始=新日期(“2020-01-07”);
结束=新日期(“2020-01-16”);
//预期:8
日志(numberWeekDays(开始、结束));
//同一周:周一至周三
开始=新日期(“2020-01-06”);
结束=新日期(“2020-01-08”);
//预期答案:3
日志(numberWeekDays(开始、结束));
//当天
开始=新日期(“2020-01-08”);
结束=新日期(“2020-01-08”);
//期望:1
日志(numberWeekDays(开始、结束));
//仅周末
开始=新日期(“2020-01-04”);
结束=新日期(“2020-01-05”);
//期望值:0;
日志(numberWeekDays(开始、结束));
// ------------------

}())你可以把它添加到你的包里。JSON也许可以在你的应用程序中使用它。不是所有的地方或文化都认为星期六和星期日是非工作日或周末。所需的结果取决于日期是否应该包括在内。是1月到1日一个营业日还是没有?1一个月到2日一天还是两天?规则会根据业务需求而变化。我使用Angular framework和Moment.js库来实现解决方案。它涵盖了所有情况。现场演示:
新日期(“01-10-2020”)
在Firefox和Safari中返回无效日期。使用
新日期(2020,9,1)要好得多
。此答案假设天数包括结束日期,因此2020年1月1日至2020年1月2日为2个工作日。我在评论中明确指出了这一点。我正在修改算法以提高效率。一个选项是添加可选的“包含”标志默认为真。这总是一个令人担忧的问题,因为我认为大多数人认为星期一到星期五是5天,但不是星期一到星期一是1天。- -多少天是星期一?当然我可以有一个“包含”标志,但这应该已经足以让人知道。