我目前有这样的代码,我可以通过添加和减去按钮获取周数以及该周的开始/结束日:
Date.prototype.getWeekNumber = function() {
var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
var dayNum = d.getUTCDay() || 7;
d.setUTCDate(d.getUTCDate() + 4 - dayNum);
var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
return Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
};
var curr;
weekReset();
function display() {
start.textContent = curr;
end.textContent = endOfWeek(curr);
week.textContent = ("Week " + curr.getWeekNumber());
}
function weekReset() {
curr = startOfWeek(new Date());
display();
}
function startOfWeek(date) {
var start = new Date(date);
start.setHours(0, 0, 0, 0);
start.setDate(start.getDate() - start.getDay());
return start;
}
function endOfWeek(date) {
date = startOfWeek(date);
date.setDate(date.getDate() + 6);
return date;
}
function weekPlus(weeks) {
curr.setDate(curr.getDate() + 7 * weeks);
display();
}
<div id="start">start</div>
<div id="end">end</div>
<div id="week">week</div>
<button onclick="weekReset()">current</button>
<button onclick="weekPlus(1)">add</button>
<button onclick="weekPlus(-1)">substract</button>
问题是它显示当前周数为34;
开始于8 月 27 日星期日
结束于九月 2 日星期六
...这应该是周数35.
那么如何更改此函数以将星期日计为一周的第一天,将星期六计为一周的最后一天呢?
任何帮助表示赞赏。
你的问题在这里:
var dayNum = d.getUTCDay() || 7;
d.setUTCDate(d.getUTCDate() + 4 - dayNum);
该代码适用于 ISO 周,并将星期日的天数调整为 7,并将日期设置为星期四,其中一周为星期一到星期日。
您想要周日到周六的周,并且想要周日的那一周,所以使用:
var dayNum = d.getUTCDay();
d.setUTCDate(d.getUTCDate() - dayNum);
可以简化为:
d.setUTCDate(d.getUTCDate() - d.getUTCDay());
Date.prototype.getWeekNumber = function () {
var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
d.setUTCDate(d.getUTCDate() - d.getUTCDay());
var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
return Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
};
var c = new Date(2017,7,26);
console.log(c.getWeekNumber() + ':' + c.toString());
var d = new Date(2017,7,27);
console.log(d.getWeekNumber() + ':' + d.toString());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)