繁体   English   中英

如何查找从星期一开始的日历的一周中的星期几?

[英]How to find week of month for calendar which starts from Monday?

我有一个从星期一开始的日历。

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日 ,则返回值if “ 1”这样就给了我"week2"但应该是"week1" "week2" "week1"

如果我选择5月15日,请给我“ week4”而不是“ week3”。

它适用于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)));

当我测试时,事实证明可以提供以下正确结果:

  1. 该月的第一天为星期一,星期二或星期日的月份
  2. 跨越四个,五个和六个星期的月份
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;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM