2017-03-16 54 views
0

我想計算2個日期之間的範圍,而不計算javascript中的週末。我有一些代碼已經計算了它們之間的範圍。但我堅持週末的一部分。日期按CJuiDatePicker在Yii框架我如何計算2個日期之間的範圍,而不計算在javascript中的週末

<script> 
    function calcDay(dt1, dt2, range){ 

    var msec1 = dt1; 
    var date1 = new date(msec1); 
    var msec2 = dt2; 
    var date2 = new date(msec2); 

    if(date1>0 || date2>0){ 
    range.val(isFinite(Math.round(date2-date1)/86400000) || 0); 
    } 
    }; 
    </script> 

86400000 inputed是一天毫秒提前

感謝

+0

可能重複[發現兩天之間的日期差異(不包括週末天)](http://stackoverflow.com/questions/3464268/find-day-difference-between-two-dates-不包括週末日) – George

+0

感謝您的回覆,我曾嘗試過,但仍然不知道。 – Trainee

回答

0

我找到了我自己的解決方案,但我忘了分享它。這是我如何使它

function myUpdate(dt1, dt2,range){ 
     var msec1 = dt1;    
     var date1 = new Date(msec1); 
     var msec2 = dt2; 
     var date2 = new Date(msec2); 
     var diff = (isFinite(Math.round (date2 - date1)/86400000) && Math.round (date2 - date1)/86400000 || 0); 
     var wEnd=0; 

     if(date1>0 || date2>0){ 
       for(var i=0; i<=diff; i++){ 
        if(date1.getDay() ==6 || date1.getDay()==0){ 
         wEnd = wEnd + 1; 
        } 
        date1.setDate(date1.getDate() + 1); 
       } 
      } 
     range.val(Math.round((diff-wEnd)+1)); 
    }; 

第一ü應該算上不同的日期,那麼date1會檢查它是否是週日或週六。那麼date1將被添加1,直到date1的值等於date2。如果date1是星期六或星期日,wEnd將獲得1.因此,您可以用wEnd減去diff。希望這可以幫助你們

0

你需要的功能是getUTCDay()。

的僞代碼將如下所示:
1 - 確定全周(天/ 7截短)
2 - 計算工作日/週末:2 *結果=週末天,5 *結果=工作日。
3 - 在這之後,剩餘時間和一週的開始日期將確定1個或2個額外的天

希望幫助,讓我知道,如果你需要的JavaScript, 約翰 -

編輯,按要求。注:調整您的原始測試,你應該發現需要的修改來恢復。

function calcDay(dt1, dt2, range) 
{ 
    var msec1 = "October 13, 2014 11:13:00"; 
    var date1 = new Date(msec1); 
    var msec2 = "October 13, 2013 11:13:00"; 
    var date2 = new Date(msec2); 

    var days; 
    var wdays; 
    var startday; 
    var nLeft; 

    // neither should be zero 
    if(date1>0 && date2>0) { 
     days = Math.round(Math.abs((date2-date1)/86400000)); 
     wdays = Math.round(days/7) * 5; 
     nLeft = days % 7; 
     startday = (date1 > date2) ? date2.getUTCDay() : date1.getUTCDay(); 

     if (startday < 2) { 
      wdays += Math.max(nLeft+startday-1,0); 
     } else if (startday == 6) { 
      wdays += Math.max(nLeft-2,0); 
     } else if (nLeft > (7-startday)) { 
      wdays += (nLeft-2) 
     } else { 
      wdays += Math.min(nLeft, 6-startday) 
     } 
    } 
}; 
+0

我可以擁有JavaScript嗎? Cz我hv嘗試了很多,但仍然不能得到結果 – Trainee

+0

@Trainee - 你去 - 注意:它寫的數週日,週末,你可以減去總數,或自己的數字和解(btw - 週日是更多複雜的,爲什麼我提供的) – John

+0

謝謝你的幫助這麼多約翰:) – Trainee