2011-05-12 38 views
2

我有一個從星期一開始的日曆。如何查找從星期一開始的日曆的月份周?

2011年5月

---------------------------- 
Mon Tue Wed Thu Fri Sat Sun 
---------------------------- 
25 26 27 28 29 30 1  week 1 
2 3 4 5 6 7 8  week 2 
9 10 11 12 13 14 15 week 3 
16 17 18 19 20 21 22 week 4 
23 24 25 26 27 28 29 week 5 
30 31 1 2 3 4  5 week 6 

我想找月份的一週給予日期。

下面的工作很好,在星期日開始的日曆上。

function getWeekOfMonth(date) { 

    prefixes = ['1', '2', '3', '4', '5']; 
    return prefixes[0 | date.getDate()/7]; 
} 

但在我的日曆(週一爲基礎)如果讓我選擇5月1日,返回值,如果「1」從而 給我"week2"但它應該是"week1"

如果我選擇5月15日,給我「week4」而不是「week3」。

它適用於像5月12日這樣的事情。

我試圖改變這一天的差距(星期一和星期日),並修改了失敗的算法。

任何人都可以告訴我如何正確修復我的算法?

function getWeekOfMonth(date) { 

    prefixes = ['1', '2', '3', '4', '5']; 
    return prefixes[0 | date.getDate() - 1/7]; 
} 
+0

如果給你week1爲may1st又是什麼給你的5月2日? – 2011-05-12 07:42:01

+0

5月2日給我week1。因爲如果是基於星期日的balendar,則第1到第7將是第1周。 – 2011-05-12 07:44:24

+0

所以week0是第一個非滿周? – 2011-05-12 07:48:12

回答

6

你首先需要檢查什麼月的一天開始,然後後添加K使date.getDate()+ k是7月的第一個星期一

那麼它很容易

function getWeekOfMonth(date) { 
    var adjustedDate = date.getDate()+k; 
    prefixes = ['0', '1', '2', '3', '4', '5']; 
    return prefixes[0 | adjustedDate/7]; 
} 

編輯:

可以使用getDay找到周的當天,並用它相對於GETDATE要了解當前一週

function getWeekOfMonth(date) { 
    var day = date.getDate() 
    day-=(date.getDay()==0?6:date.getDay()-1);//get monday of this week 
    //special case handling for 0 (sunday) 

    day+=7; 
    //for the first non full week the value was negative 

    prefixes = ['0', '1', '2', '3', '4', '5']; 
    return prefixes[0 | (day)/7]; 
} 
+0

實際上不會每個月都改變一次嗎?你需要計算第一天的位置? – 2011-05-12 07:59:39

+0

它確實(prolly應該把它放在代碼片段中) – 2011-05-12 08:07:03

+0

不,k是一個移位值,取決於你想要改變你的星期幾天。 – boisvert 2011-05-12 08:09:42

1

的星期一(我在這個崗位測​​試接受的答案,發現它不適合個月的工作,其中每月的第一天是週一或週二。但我的回答主要是基於接受的答案也)。

我覺得這個函數應該做的工作。

 function getWeekNo(date) { 

      var day = date.getDate() 

      //get weekend date 
      day += (date.getDay() == 0 ? 0 : 7 - date.getDay()); 

      return Math.ceil(parseFloat(day)/7); 
     } 

     alert(getWeekNo(new Date(2015, 2, 31))); 

當我測試,事實證明給予正確的結果爲:

  1. 月在本月的第一天是星期一,星期二或星期天
  2. 月跨越了四,五和六週
0
function getWeekOfMonth(date) { 

    var nth = 0; // returning variable. 
    var timestamp = date.getTime(); // get UTC timestamp of date. 
    var month = date.getMonth(); // get current month. 
    var m = month; // save temp value of month. 

    while(m == month) { // check if m equals our date's month. 
     nth++; // increment our week count. 
     // update m to reflect previous week (previous to last value of m). 
     m = new Date(timestamp - nth * 604800000).getMonth(); 
    } 

    return nth; 

} 
相關問題