我怎樣才能得到所有特定月份的week number?from/to date
下面的代碼是我構建的特定月份的 display week number,from/to date每當我在回圈中插入函式時,它都會回傳無限回圈。
function getISOWeeksInMonth(month, year) {
let weekStart = new Date(year, month - 1, 1);
weekStart.setDate(weekStart.getDate() - (weekStart.getDay() || 7) 1);
let weekEnd = new Date(weekStart);
weekEnd.setDate(weekEnd.getDate() 6);
let weekNum = moment(weekStart, "YYYY-MM-DD").week()
let weeks = [];
do {
weeks.push({
weekNum : weekNum ,
start: new Date(weekStart),
end: new Date(weekEnd)
});
weekStart.setDate(weekStart.getDate() 7);
weekEnd.setDate(weekEnd.getDate() 7);
} while (weekStart.getMonth() < month);
return weeks;
}
_.forEach(moment.months(), function (month_name) {
var month_number = moment().month(month_name).format("MM");
getISOWeeksInMonth(month_number, 2022).forEach(week => console.log(
'Week : ' week.weekNum
'\nStart: ' week.start.toDateString()
'\nEnd : ' week.end.toDateString())
);
})
結果應回傳串列week number,from/to date
示例網址:
https ://savvytime.com/week-number/philippines/2022
這是我在回圈外運行函式時的示例:
function getISOWeeksInMonth(month, year) {
let weekStart = new Date(year, month - 1, 1);
weekStart.setDate(weekStart.getDate() - (weekStart.getDay() || 7) 1);
let weekEnd = new Date(weekStart);
weekEnd.setDate(weekEnd.getDate() 6);
let weekNum = moment(weekStart, "YYYY-MM-DD").week()
let weeks = [];
do {
weeks.push({
weekNum : weekNum ,
start: new Date(weekStart),
end: new Date(weekEnd)
});
weekStart.setDate(weekStart.getDate() 7);
weekEnd.setDate(weekEnd.getDate() 7);
} while (weekStart.getMonth() < month);
return weeks;
}
getISOWeeksInMonth(1, 2022).forEach(week => console.log(
'Week : ' week.weekNum
'\nStart: ' week.start.toDateString()
'\nEnd : ' week.end.toDateString())
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.2/moment.min.js"></script>
uj5u.com熱心網友回復:
function getISOWeeksInMonth(month, year) {
let weekStart = new Date(year, month - 1, 1);
weekStart.setDate(weekStart.getDate() - (weekStart.getDay() || 7) 1);
let weekEnd = new Date(weekStart);
weekEnd.setDate(weekEnd.getDate() 6);
let weeks = [];
do {
let weekNum = moment(weekStart, "YYYY-MM-DD").week()
weeks.push({
weekNum : weekNum,
start: new Date(weekStart),
end: new Date(weekEnd)
});
weekStart.setDate(weekStart.getDate() 7);
weekEnd.setDate(weekEnd.getDate() 7);
} while (weekStart.getMonth() < month && (weekStart.getMonth() || (month < 12) ));
return weeks;
}
let _ = moment.months()
_.forEach(function (month_name) {
var month_number = moment().month(month_name).format("MM");
getISOWeeksInMonth(month_number, 2022).forEach(week => console.log(
'Week : ' week.weekNum
'\nStart: ' week.start.toDateString()
'\nEnd : ' week.end.toDateString())
);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.2/moment.min.js"></script>
當您計算 12 月(第 12 個月)的周數時,您從上個月的最后一周(11 月,即 11 日)開始,并且在您的do {...} while回圈中,您將 7 天添加到weekStart. 到目前為止一切順利,但是您while (weekStart.getMonth() < month)正在檢查 的 0-11 值weekStart.getMonth(),當它從 11 向前滾動時,它不會轉到 12,而是轉到 0。所以它總是小于 12(12 月!)!
你可以通過調整你while來解決這個問題:
while (weekStart.getMonth() < month && (weekStart.getMonth() || (month < 12) ))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456367.html
標籤:javascript 数组 日期 约会时间 异酸盐
上一篇:如何僅將日期列分為兩列
下一篇:按R中的日期差異分組
