2011-05-12 70 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; 

} 
相关问题