我的星期一开始有日历。
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 :(得分: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];
}
答案 1 :(得分: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)));
当我测试时,结果显示正确的结果:
答案 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;
}