2016-11-22 6 views
4

javascriptを使用して、必要に応じて自動的に週末を追加する就業日(月 - 金)を追加するにはどうすればよいですか?Javascriptを使用して作業日を追加する

今日に5営業日(2016年11月22日火曜日)を追加するとTue. 29th Nov. 2016で、Sun. 27th Nov. 2016ではなくなります。

答えて

6

日付、すなわち上に日数を追加する(getDateとの組み合わせで)DatesetDate機能を使用することが可能です - あなたは仕事日の期間内に週末の日数を計算したらそう

var myDate = new Date(); // Tue 22/11/2016 
myDate.setDate(myDate.getDate() + 3); // Fri 25/11/2016 

最終日を取得するために、開始日に必要な作業日数を追加することができます。

明らかに、これは国民の休日を考慮していないでしょうが、この機能は動作するはずです -

function addWorkDays(startDate, days) { 
    // Get the day of the week as a number (0 = Sunday, 1 = Monday, .... 6 = Saturday) 
    var dow = startDate.getDay(); 
    var daysToAdd = parseInt(days); 
    // If the current day is Sunday add one day 
    if (dow == 0) 
     daysToAdd++; 
    // If the start date plus the additional days falls on or after the closest Saturday calculate weekends 
    if (dow + daysToAdd >= 6) { 
     //Subtract days in current working week from work days 
     var remainingWorkDays = daysToAdd - (5 - dow); 
     //Add current working week's weekend 
     daysToAdd += 2; 
     if (remainingWorkDays > 5) { 
      //Add two days for each working week by calculating how many weeks are included 
      daysToAdd += 2 * Math.floor(remainingWorkDays/5); 
      //Exclude final weekend if remainingWorkDays resolves to an exact number of weeks 
      if (remainingWorkDays % 5 == 0) 
       daysToAdd -= 2; 
     } 
    } 
    startDate.setDate(startDate.getDate() + daysToAdd); 
    return startDate; 
} 

//And use it like so (months are zero based) 
var today = new Date(2016, 10, 22); 
today = addWorkDays(today, 5); // Tue Nov 29 2016 00:00:00 GMT+0000 (GMT Standard Time) 

またDateプロトタイプに加えることができる -

Date.prototype.addWorkDays = function (days) { 
    var dow = this.getDay(); 
    var daysToAdd = parseInt(days); 
    // If the current day is Sunday add one day 
    if (dow == 0) { 
     daysToAdd++; 
    } 
    // If the start date plus the additional days falls on or after the closest Saturday calculate weekends 
    if (dow + daysToAdd >= 6) { 
     //Subtract days in current working week from work days 
     var remainingWorkDays = daysToAdd - (5 - dow); 
     //Add current working week's weekend 
     daysToAdd += 2; 
     if (remainingWorkDays > 5) { 
      //Add two days for each working week by calculating how many weeks are included 
      daysToAdd += 2 * Math.floor(remainingWorkDays/5); 
      //Exclude final weekend if the remainingWorkDays resolves to an exact number of weeks 
      if (remainingWorkDays % 5 == 0) 
       daysToAdd -= 2; 
     } 
    } 
    this.setDate(this.getDate() + daysToAdd); 
}; 

//And use it like so (months are zero based) 
var today = new Date(2016, 10, 22) 
today.addWorkDays(5); // Tue Nov 29 2016 00:00:00 GMT+0000 (GMT Standard Time) 
0

は、私はあなたがmoment-business-daysを使用することができると思います。

例:

// 22-11-2016 is Tuesday, DD-MM-YYYY is the format 
moment('22-11-2016', 'DD-MM-YYYY').businessAdd(5)._d // Tue Nov 29 2016 00:00:00 GMT-0600 (CST) 
関連する問題