2011-10-31 11 views
6

私は2つの日付の間の作業日を取得しようとしています。 例:stdate = 28/10/2011およびendate = 04/11/2011。これは6営業日でなければならないが、5日間しか与えない。Javascriptを使用して作業日を取得する

var workingdays = 0; 
var weekday  = new Array(7); 
weekday[0]="Sunday"; 
weekday[1]="Monday"; 
weekday[2]="Tuesday"; 
weekday[3]="Wednesday"; 
weekday[4]="Thursday"; 
weekday[5]="Friday"; 
weekday[6]="Saturday"; 

while (stdate <= endate) 
{ 
    var day = weekday[stdate.getDay()]; 
    if(day != "Saturday" && day != "Sunday") 
    { 
     workingdays++; 
    } 
    console.log(weekday[stdate.getDay()]); 
    stdate = new Date(stdate.getTime() + 86400000); 
} 

コンソールログには、以下の結果が表示されます。

Friday 
Saturday 
Sunday 
Sunday 
Monday 
Tuesday 
Wednesday 
Thursday 

日曜日は何らかの理由で2回表示されます。どんな助けもありがとう。

+0

はどのようにあなたの日付(開始および終了)JavaScriptに渡すのですか?文字列を変換しますか? – emt14

答えて

6

夏時間。

日にちに24時間を追加しているため、日曜日の翌日には、その日曜日に25時間あります。

あなたが代わりに時間を追加する日を追加する必要があります

stdate = new Date(stdate.getFullYear(), stdate.getMonth(), stdate.getDate() + 1); 

説明:あなたが範囲外の日付でDateコンストラクタを呼び出すと、それは来月にラップをautomaticallなり、すなわちnew Date(2010,9,32)が与えるをあなたは11月初めです。

2

あなたは

stdate = new Date(stdate.getTime() + 86400000); 
7

の代わりにこの

stdate.setDate(stdate.getDate()+1); 

を試すことができますここに行く:

function getWorkingDays(startDate, endDate){ 
    var result = 0; 

    var currentDate = startDate; 
    while (currentDate <= endDate) { 

     var weekDay = currentDate.getDay(); 
     if(weekDay != 0 && weekDay != 6) 
      result++; 

     currentDate.setDate(currentDate.getDate()+1); 
    } 

    return result; 
} 

var begin = new Date(2011, 09, 8); 
var end = new Date(2011, 09, 25); 
alert(getWorkingDays(begin, end)); // result = 12 days 

二つの変数の月表示がゼロに基づいていることに注意してください。私の例では10月(10月)を見ています。

+1

私は変更されましたvar currentDate = startDate; var currentDate = new Date(startDate.getTime()); startDate変数の突然変異を避けるためです。 – Stanislav

0

あなたは開始日と終了日

からの週の日付を取得することができます
var weekday = new Array(7); 
    weekday[0] = "Sunday"; 
    weekday[1] = "Monday"; 
    weekday[2] = "Tuesday"; 
    weekday[3] = "Wednesday"; 
    weekday[4] = "Thursday"; 
    weekday[5] = "Friday"; 
    weekday[6] = "Saturday"; 

    var object = []; 


    function getTuesday(startDate, endDate, n) { 

     var currentDate = startDate; 
     while (currentDate <= endDate) { 
      if (weekday[currentDate.getDay()] === weekday[n]) 
       object.push(currentDate + "\n"); 
      currentDate.setDate(currentDate.getDate() + 1); 
     } return object; 
    } 

    var begin = new Date(2015, 11, 08); 

    var end = new Date(2016, 01, 08); 

    alert(getTuesday(begin, end, 3) + "\n Total date or week: " + object.length); 
関連する問題