在javascript中只获得两天之间的工作日数

时间:2015-09-15 15:26:19

标签: javascript

我必须在当天x天后的javascript中计算变量。我必须根据一些输入参数添加一些天数。

var currentDate = new Date();
var dd = currentDate.getDate();
var mm = currentDate.getMonth()+1; 
var yyyy = currentDate.getFullYear();

if(dd<10) {
    dd='0'+dd
} 

if(mm<10) {
    mm='0'+mm
} 

currentDate= mm+'/'+dd+'/'+yyyy;

现在我希望在currentDate变量的28天之后得到一些日期,但它不应包含星期六和星期日。

所以我的问题是如何从28(例如)中排除周末(2天)。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

这是将 n 工作日添加到日期的通用功能

function addDays(dt, n) {
    var rem = n % 5;
    var add = 7 * (n - rem) / 5 + rem;
    var ret = new Date(dt);
    ret.setDate(ret.getDate() + add);
    if (ret.getDay() == 6) ret.setDate(ret.getDate() + 2);
    else if (ret.getDay() == 0) ret.setDate(ret.getDate() + 1);
    return ret;
}

答案 1 :(得分:0)

这很简单。下面的脚本会在startend日期之间的所有日期进行检查,并检查它是否不是星期六(tmpDate.getDay() != 6)或星期日(tmpDate.getDay() != 0

var start = new Date();
var end = new Date(2016, 6, 1);
var allDays = Math.floor((end.getTime() - start.getTime())/ 86400000);

var workingDays = 0;
for(var i = 0; i < allDays; i++){
    var tmpDate = new Date();
    tmpDate.setTime(today.getTime() + i * 24*60*60*1000);
    if(tmpDate.getDay() != 0 && tmpDate.getDay() != 6)
        wokringDays++;
}

alert(workingDays);

答案 2 :(得分:0)

这将为您提供工作天数:

function getWorkingDays(currentDateObj, numberOfDays)
{
  if(numberOfDays < 0) return false;
  var futureDateObj = new Date();
  futureDateObj.setDate(currentDateObj.getDate() + numberOfDays);

  var daysCnt  = 1 + Math.round((futureDateObj.getTime()-currentDateObj.getTime())/(24*3600*1000));
  var weekCnt  = Math.floor( (currentDateObj.getDay() + daysCnt) / 7 );
  var weekends = 2 * weekCnt + (currentDateObj.getDay()==0) - (futureDateObj.getDay()==6);
  return numberOfDays - weekends;
}
console.log(getWorkingDays(new Date(), 28));