Javascript 如何查找从星期一开始的日历的月份周?

Javascript 如何查找从星期一开始的日历的月份周?,javascript,Javascript,我有一个从周一开始的日历 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

我有一个从周一开始的日历

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];
}
但是在我的日历中(以星期一为基础),如果我选择了May 1st,那么的返回值为“1” 给我
“week2”
,但它应该是
“week1”

如果我选择5月15日,给我“第4周”而不是“第3周”

它在5月12日这样的事情上起作用

我试图改变这一天的间隔(周一和周日),并修改了失败的算法

有人能告诉我如何正确地修正算法吗

function getWeekOfMonth(date) {

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

您首先需要检查该月的开始日期,然后添加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];
}
(当我在这篇文章中测试被接受的答案时,发现它在每个月的第一天是星期一或星期二的几个月内都不起作用。但我的答案也主要基于被接受的答案。)

我认为这个功能应该完成这项工作

        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)));
当我进行测试时,结果表明它给出了以下方面的正确结果:

  • 一个月的第一天是星期一、星期二或星期日的月份
  • 跨越四、五、六周的月份

  • 如果5月1日给你一周,5月2日给你什么?5月2日给我一周。因为如果是基于周日的巴伦达,那么第1到第7周将是第1周。那么第0周是第一个非整周?是的,我刚刚做的是基于零的,它可以是任何东西,但有6周,正如上面的日历所示。实际上,k不随月份而变化吗?你需要计算第一天在哪里?不,k是一个移位值,它取决于你一周要移位多少天。我不太清楚,k代表什么?如果date.getDate()返回12,12+k=7?那么K=-5?真的很困惑。。。
    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;
    
    }