![](/img/trans.png)
[英]Get the date range when week number and Year given where each week start from sunday using js
[英]Get week number with week starting from sunday
我目前有以下代碼,在該代碼中,我可以通過添加和減號按鈕獲得星期幾以及該周的開始/結束日期:
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日星期日開始
於9月02日星期六結束
...這應該是第35周。
那么,如何更改此功能以將星期天計算為一周的第一天,將星期六計算為一周的最后一天?
任何幫助表示贊賞。
您的代碼d.setUTCDate(d.getUTCDate() + 4 - dayNum);
正在將您的日期重新設置為三天前。 我認為這就是您獲得上周人數的原因。 我檢查了刪除代碼,它工作正常。
您的問題在這里:
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.