2016-07-07 62 views
-1

我正在使用以下代碼將X天數添加到今天的日期。在增加天數的同時,如果遇到星期六或星期日,我需要跳過它。例如,如果今天是2016年7月7日(星期四),並且我增加5天,通常是2016年12月7日(星期二),在這種情況下,我需要跳過星期六和星期日,因此添加5日期將是2016年7月14日(星期四)。這是添加X天的代碼,X代表NumDays。我想我需要添加一個FOR循環:NewDate.setDate(NewDate.getDate()+ parseFloat(NumDays));並檢查它是否落在sat或sun上,如果是,請跳過它,但無法解決它。任何人都可以做這樣的事情嗎?當添加若干天的日期時,如何檢查它是星期六還是星期日

var date = new Date(today); 
    var NewDate = new Date(date); 

    var NumDays = globals().XML.selectSingleNode("//_GetRSNumberOfDays/NumberOfDays").text; 

    NewDate.setDate(NewDate.getDate() + parseFloat(NumDays)); 

    switch(NewDate.getDay()) 
    { 
     case 6: 
      NewDate.setDate(NewDate.getDate() + 2); 
     break; 

     case 0: 
      NewDate.setDate(NewDate.getDate() + 1); 
     break; 
    } 

    var dd = NewDate.getDate(); 
    var mm = NewDate.getMonth() + 1; 
    var y = NewDate.getFullYear(); 

    var someFormattedDate = y + "/" + mm + "/" + dd 
+0

在日期對象上使用'.getUTCDay()':[Date.prototype.getUTCDay()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay) –

回答

0

這來了不少,如果你處理它巧妙你可以解掉在不斷的複雜性(即使用循環):

從本質上講,你可以使用% 7日期序號來標識星期幾。

分三步然後繼續,天X

  1. 的總數加入天所需數目,直到你到了週末的開始(記得要使用7%檢查)。從X中減去該值。必要時終止。

  2. 添加7 *(X/5)天,從X中減去5 *(X/5)。注意我在這裏依賴於整數除法。

  3. 添加X的剩餘值(如果有的話)。

1

@拔示巴的答案是方式更有效,但如果你正在尋找跨大型成套日期添加少量天,而不是,這可能是更容易理解和維護以後:

function addDays(date, howMany) { 
    var date = new Date(date); // copy off 
    var skip = [0, 6] 
    while (howMany-- > 0) { 
     date.setDate(date.getDate() + 1); // add a day 
     while (skip.indexOf(date.getDay()) > -1) { // if we're on a skip day, keep on adding 
      date.setDate(date.getDate() + 1); 
     } 
    } 
    return date 
} 
+0

事實上,您的想法實施起來相當簡單,您已花時間完成這一事實就證明了這一點。加一。 (雖然我很想看看'howMany - > 0' ;-)) – Bathsheba

相關問題