2017-05-03 16 views
1

今日の日付から7営業日(土日祝日を除く)に日付を設定しようとしています。私はその後、私はいずれかを見つけた場合、私はtodayPlusSevenDaysに追加todaysDate & todayPlusSevenDays 間の週末の日数を数える(todaysDate)+ 7日(todayPlusSevenDays) 今日から7営業日(土日祝日は除く)

  • 今日の日付にデフォルトの日付を設定することにより開始

    1. その後、私は祝日のためにチェックして、私は任意のを見つけた場合、私はまた、私は今、私のデフォルトの日付に余分日追加したこれらのチェックを実行した後、彼らに

    を追加する - どのように私はのその新しい範囲場合もを確認することができます週末や祝日は日数に含まれますか?

    たとえば、デフォルトの日付が週末または銀行の休日になった場合は、さらに日数を加算する必要があります(今はありません)。 https://jsfiddle.net/7yxna052/

    function prepopulateDropdown() { 
        var todaysDate = new Date(), 
         tempNewDate = new Date(), 
         todayPlusSevenDays, 
         numberOfWeekends, 
         todayPlusSevenDaysPlusWeekends, 
         currentHour = todaysDate.getHours(), 
         holidayCount = 0, 
         weekendDayCount = 0, 
         ukHolidays = ['2017-05-12','2017-05-29','2017-08-28','2017-12-25','2017-12-26']; 
    
        // check if current time <or> 6pm GMT 
        function setDefaultdDate(){ 
        if(currentHour >= 18){ 
          todayPlusSevenDays = new Date(tempNewDate.setDate(tempNewDate.getDate() + 7)); 
         } 
         else{ 
          todayPlusSevenDays = new Date(tempNewDate.setDate(tempNewDate.getDate() + 6)); 
         } 
        } 
        setDefaultdDate(); 
    
        // Weekend day count 
        function calculateWeekendDays(startDate, endDate){ 
         while(startDate < endDate){ 
          startDate.setDate(startDate.getDate() + 1); 
          if(startDate.getDay() === 0 || startDate.getDay() == 6){ 
           ++weekendDayCount ; 
          } 
         } 
         return weekendDayCount; 
        } 
        calculateWeekendDays(todaysDate, todayPlusSevenDays); 
    
        todayPlusSevenDaysPlusWeekends = new Date(tempNewDate.setDate(tempNewDate.getDate() + weekendDayCount)); 
    
    
    
        // count UK bank holidays within todayPlusSevenDays 
        function calculateBankHolidays(startDate, endDate){ 
         startDate.setHours(0,0,0,0); 
         endDate.setHours(0,0,0,0); 
    
         for(i=0; i < ukHolidays.length; i++){ 
         ukHolidaysFormated = new Date(ukHolidays[i]).setHours(0,0,0,0); 
         d = new Date(ukHolidays[i]).getDay(); 
    
         if (ukHolidaysFormated >= startDate && ukHolidaysFormated <= endDate && !(d == 0 || d == 6)) { 
          holidayCount++; 
         } 
         } 
         return holidayCount; 
        } 
        calculateBankHolidays(todaysDate, todayPlusSevenDaysPlusWeekends); 
    
        todayPlusSevenDaysPlusWeekends = new Date(todayPlusSevenDaysPlusWeekends.setDate(todayPlusSevenDaysPlusWeekends.getDate() + holidayCount)); 
    
    
        // set date to prepopulate 
        var today = new Date(); 
        var year = todayPlusSevenDaysPlusWeekends.getFullYear(); 
        var month = '0' + (todayPlusSevenDaysPlusWeekends.getMonth() + 1); 
        var day = todayPlusSevenDaysPlusWeekends.getDate(); 
    
        $('.slctDay option').each(function(){ 
         if($(this).val() == day){ 
          $(this).attr('selected','selected'); 
         } 
        }); 
        $('.slctMonth option').each(function(){ 
         if($(this).val() == month){ 
          $(this).attr('selected','selected'); 
         } 
        }); 
        $('.slctYear option').each(function(){ 
         if($(this).val() == year){ 
          $(this).attr('selected','selected'); 
         } 
        }); 
    } 
    
  • +0

    おそらくJAVを使用して、[*追加営業日複製ascript *](http://stackoverflow.com/questions/40739059/add-working-days-using-javascript)を参照してください。 – RobG

    答えて

    2

    ここに、@andiの話題の例があります。私は電卓オブジェクトとして作った。

    var calculator = { 
     
        workDaysAdded: 0, 
     
        ukHolidays: ['2017-05-12','2017-05-29','2017-08-28','2017-12-25','2017-12-26'], 
     
        startDate: null, 
     
        curDate: null, 
     
    
     
        addWorkDay: function() { 
     
         this.curDate.setDate(this.curDate.getDate() + 1); 
     
         if(this.ukHolidays.indexOf(this.formatDate(this.curDate)) === -1 && this.curDate.getDay() !== 0 && this.curDate.getDay() !== 6) { 
     
          this.workDaysAdded++; 
     
         } 
     
        }, 
     
    
     
        formatDate: function(date) { 
     
         var day = date.getDate(), 
     
          month = date.getMonth() + 1; 
     
    
     
         month = month > 9 ? month : '0' + month; 
     
         day = day > 9 ? day : '0' + day; 
     
         return date.getFullYear() + '-' + month + '-' + day; 
     
        }, 
     
    
     
        getNewWorkDay: function(daysToAdd) { 
     
         this.startDate = new Date(); 
     
         this.curDate = new Date(); 
     
         this.workDaysAdded = 0; 
     
         
     
         while(this.workDaysAdded < daysToAdd) { 
     
          this.addWorkDay(); 
     
         } 
     
         return this.curDate; 
     
        } 
     
    } 
     
    
     
    var newWorkDay7 = calculator.getNewWorkDay(7); 
     
    var newWorkDay9 = calculator.getNewWorkDay(9); 
     
    var newWorkDay14 = calculator.getNewWorkDay(14); 
     
    console.log(newWorkDay7); 
     
    console.log(newWorkDay9); 
     
    console.log(newWorkDay14);

    +0

    この例ではおかげさしです。それは魅力のように働く。 – John

    +0

    もう少しテストをしていて、バグがあるようです。 'curDate'が土曜日または日曜日の場合、 'newWorkDay'は1日短くなります。 – John

    +0

    うーん、もう一度コードを試すことができます。私は若干の変更を加え、2つの追加の 'console.logs'を追加しました。 – gforce301

    2

    チェックイン時間の代わりに、7日間の範囲で1日:

    はここで、これまでに私のコードです。

    まず、デフォルトの日付を今日の日付に設定します。その後、ある日に一度に確認してください。その日が稼働日の場合は、workingDayカウンタを1だけインクリメントします。そうでない場合は、翌日にループします。あなたのworkingDayカウンタが7に達すると、それはあなたが必要とする日付です。

    +0

    あなたのJSの知識はかなり良いと思われるので、私はあなたがこれについて特定のJSを見る必要はないと仮定しています。この機能には、基礎となるロジックの少しのリダイレクションが必要だったようです。しかし、これがどのようにコード化されるかについてご質問がありましたら、お尋ねください。 – andi

    +0

    それは意味があります。あなたの助けに感謝します。 – John

    0

    あなただけ(土曜日と日曜日と仮定して)7日を追加し、休日や週末を除外したい場合は、あなただけの開始から終了までのステップとあなたのように毎日テストすることができます行く:

    var ukHolidays = ['2017-05-12','2017-05-29','2017-08-28','2017-12-25','2017-12-26']; 
     
    
     
    // Return date string in format YYYY-MM-DD 
     
    function getISODate(date){ 
     
        function z(n) {return (n<10?'0':'')+n} 
     
        return date.getFullYear() + '-' + z(date.getMonth() + 1) + '-' + z(date.getDate()); 
     
    } 
     
    
     
    // Modifies date by adding 7 days, excluding sat, sun and UK holidays 
     
    function add7WorkingDays(date) { 
     
        for (var i=7; i; i--) { 
     
        // Add a day 
     
        date.setDate(date.getDate() + 1); 
     
    
     
        // If a weekend or holiday, keep adding until not 
     
        while(!(date.getDay()%6) || ukHolidays.indexOf(getISODate(date)) != -1) { 
     
         date.setDate(date.getDate() + 1); 
     
        } 
     
        } 
     
        return date; 
     
    } 
     
    
     
    // Add 7 working days to today 
     
    var d = new Date(); 
     
    console.log('Add 7 working days to ' + d.toString() + 
     
          '\nResult: ' + add7WorkingDays(d).toString());

    関連する問題