我正在寻找一些帮助,因为我花了最近8个小时试图找到一种方法去做我想要完成的事情。
现在我必须使用JavaScript,不能使用插件,但我可以使用jQuery库。
我基本上是在为大学一年的学期分配周,所以我们说2014年9月29日(星期一)到1月26日大约15周。
现在我使用这样的东西:
Date.prototype.getWeek = function() {
var firstJan = new Date(2014,0,1);
var today = new Date(2014, 9, 14);
var firstMonSem1 = new Date(2014, 8, 29);
var firstMonSem2 = new Date(this.getFullYear(), 1, 1);
var dayOfYear = ((today - firstJan + 86400000)/86400000);
var startWeekSem1 = ((firstMonSem1 - firstJan + 86400000)/86400000);
var startWeekSem2 = ((firstMonSem2 - firstJan + 86400000)/86400000);
var currentWeekNumber = Math.ceil(dayOfYear/7);
var startWeekNumberSem1 = Math.ceil(startWeekSem1/7);
var startWeekNumberSem2 = Math.ceil(startWeekSem2/7);
var output = {current: currentWeekNumber, sem1: startWeekNumberSem1, sem2: startWeekNumberSem2};
return output;
};
所以,我将返回当年的第一学期和第二学期的学期开始日期。
但是对于这个例子,我们只关注第一个是9月29日(星期一)到1月26日,大约15周。
现在我根据学期开始时的价值计算结果,并在圣诞节期间完成了4周假期。然后我有一个数组作为我们所在学期的哪一周的指数,与一年中的一周相比(这种方式可能是一年中的第41周,根据索引数组,我知道这是第2周)。
这里是代码(注意:它有效!)
var today = new Date();
var info = today.getWeek();
if (info['current'] >= info['sem1'] && info['current'] <= (info['sem1'] + 18)) {
// Semester 1
var index = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
var yearWeeks = [];
var count = 1;
for (var i = info['sem1']; i < (info['sem1'] + 18); i++) {
if (count !== 12 && count !== 13 && count !== 14) {
yearWeeks.push(i);
}
count++;
}
var rightIndex = $.inArray(info['current'], yearWeeks);
var x = 1;
while (x <= 15) {
if (x >= rightIndex) {
var weekOption = $("<option/>", {
"value" : x,
html : "Week "+x
}).appendTo(week);
}
x++;
}
}
所以我在这里所做的就是选择所有比当前周更大的周数,所以如果我们在第5周那么那么一周的1,2,3,4不会是这个例子就是这样的(因为在项目中我们选择了一个星期进行预订,但那是无关紧要的)。
现在,问题。
这一切都很有效,但有一个主要的问题,例如周三的一周变化:
第1周将于9月29日(星期一)开始 第2周从10月8日(星期三)开始 第3周从10月15日(星期三)开始
因此,每周一周都会发生变化,现在因为这个系统正在实施,因此您可以为周一周一到周五预订一周,我需要每周更新一周,而不是周三。
我真的需要帮助,我知道可能需要掌握很多。但是,我感谢所有帮助。
谢谢。
答案 0 :(得分:0)
我认为你需要替换这一行:
var currentWeekNumber = Math.ceil(dayOfYear/7);
成为:
var currentWeekNumber = Math.ceil((dayOfYear + 5)/7);
从星期三开始一周。在这种情况下,第2天(星期二)的一周是Math.ceil((2+5)/7)=1
,而第3天(星期三)是Math.ceil((3+5)/7)=2
。
答案 1 :(得分:0)
我做了一些,希望它有所帮助。这不仅适用于您使用的2014年,而且适用于当年。通过一些调整,您可以调整。 您将获得一年中的第一个并获得日期数的偏移量。然后计算当前日期并减去。结果将帮助您获得周末。 本周从星期一开始(其他地区可能在星期日)。
我创造了一个小提琴,所以你可以玩它: http://jsfiddle.net/djwave28/r0m4sokv/
这是这个小提琴的摘要:
//设置偏移量
var offset = 0;
var now = new Date();
var testday = new Date(now.getTime() + offset * 24 * 60 * 60 * 1000);
var firstofyear = new Date(testday.getFullYear(), 0, 1);
var firstdayoffset = firstofyear.getDay();
var daynr = Math.ceil((testday - firstofyear) / 86400000);
var weeknr = (daynr - firstdayoffset) / 7;