2015-05-22 49 views
1

我正在使用函數將年份中給定週數的開始日期和結束日期返回給我。下面是函數:從週中開始考慮年份的開始和結束日期

function getWeekRange(week){ 

      var d = new Date("Jan 01, " + $scope.today.getFullYear() + " 01:00:00"); 
      var w = d.getTime() + 604800000 * (week); 
      var d1 = new Date(w); 
      var d2 = new Date(w + 518400000); 

      return { 
       startDate: d1, 
       endDate: d2, 
      }; 

} 

我設置年動態,讓我們看一個例子,其中年是2015。考慮到由0開始的週數,如果我用getWeekRange(0),我會收到以下結果:

{ 
    startDate: Thu Jan 01 2015 01:00:00 GMT-0200 (BRST), 
    endDate: Wed Jan 07 2015 01:00:00 GMT-0200 (BRST) 
} 

的問題是,這個代碼不考慮2015年開始在星期四。爲getWeekRange(0)正確的結果應該是:

{ 
    startDate: Thu Jan 01 2015 01:00:00 GMT-0200 (BRST), 
    endDate: Sat Jan 03 2015 01:00:00 GMT-0200 (BRST) 
} 

getWeekRange(1)的結果應該是:

{ 
    startDate: Sun Jan 04 2015 01:00:00 GMT-0200 (BRST), 
    endDate: Sat Jan 10 2015 01:00:00 GMT-0200 (BRST) 
} 

沒有人有線索?

- 編輯 -

我的問題是從this one不同,因爲我沒有在一年中的某一天,我只有一年(從0到51)的週數,而且我的案例認爲,如likeitlikeit所述,本年的第一週只是整週的一部分。

+1

這不完全是重複的。但是,我認爲你對一週的理解是錯誤的。一週總是有7天,並且可能從一年到另一週。你所要求的實際上並不是一週,而只是一個特定年份的一部分。 – likeitlikeit

回答

0

This answer顯示如何使用getDate計算一天中的第一天來計算當天的偏移量。

使用此方法,可以使用getDate來確定一年中的第一天是哪一天。然後,您可以從該值中減去一週中的最後一天,以知道要將d2添加到多少天才能計算星期六的日期,方法是從一年中的第一天起調整日期+直到結束的天數的偏移量1月1日的一週。

2

我可以爲我的問題找到一個簡單的解決方案,因爲只有我的一年的第一週可能會導致我的問題。這裏是代碼:

function getWeekRange(week){ 
      var d = new Date("Jan 01, " + $scope.today.getFullYear() + " 01:00:00"); 
      var firstWeekDays = 7 - d.getDay(); 
      var d1, d2; 

      if(week > 0) { 
       var w = d.getTime() + 604800000 * (week-1) + 24*60*60*1000 * firstWeekDays; 
       d1 = new Date(w); 
       d2 = new Date(w + 518400000); 
      } else { 
       d1 = d; 
       d2 = new Date(d1.getTime() + 24*60*60*1000 * (6 - d1.getDay()));      
      } 

      return { 
       startDate: d1, 
       endDate: d2, 
      }; 

    } 

從初始代碼有2個主要區別。

  • 對於一年中的一週,我只是得到了一年的第一天始,然後根據一週中的一天,它開始我可以找到周結束當天

  • 對於其他周,我總計7*week-1天到第一天(這筆金額不考慮第一週的天數),並且還加上firstWeekDays這是第一週的天數(因爲它與其他星期不同,總是7天)。

如果有人有更好的解決方案,我會很樂意傾聽。

相關問題