[英]moment.js - Check if two moments are from the same week, but weeks begin on Friday and end on Thursday
[英]Check if a week is between two weeks
如果一周在兩周之間,我想返回 true。 即,時間段是第 48 周(2021 年)到第 3 周(2022 年)。 如果在一周之間,我想返回 true。
我正在檢查的課程周和年介於兩者之間。 開始周和年和結束周和年是期間。
我下面的代碼不適用於示例(2021 年第 48 周 -> 2022 年第 3 周)
我寧願不轉換為 Date 對象,但如果需要,我會。
const isSamePeriod = (
lessonWeek,
lessonYear,
startWeek,
startYear,
endWeek,
endYear
) => {
if (lessonWeek >= startWeek && lessonYear === startYear) {
if (lessonWeek <= endWeek && lessonYear === endYear) {
return true;
}
}
return false;
};
您可以將值連接為年 + 周的字符串,前提是周是零填充的,然后進行比較,例如
const isSamePeriod = ( lessonWeek, lessonYear, startWeek, startYear, endWeek, endYear ) => { let z = n => ('0'+n).slice(-2); let lesson = lessonYear + z(lessonWeek); let start = startYear + z(startWeek); let end = endYear + z(endWeek); return lesson >= start && lesson <= end; }; // Examples [[47,2021], [48,2021], [50,2021], [ 1,2022], [ 3,2022], [ 4,2022] ].forEach( arr => console.log(arr + ' ' + isSamePeriod(...arr, 48,2021, 3,2022)) );
您還可以將周、年值轉換為日期,例如
// Convert year, week to Date // Assumes ISO week: week starts on Monday, first week // starts on Monday before first Thursday of year function yearWeekToDate(year, week) { // 4th is always in first week let d = new Date(year, 0, 4); // Shift to prior Monday if not Monday d.setDate(d.getDate() - d.getDay() + 1); // Add 7 days for each week, decrement week number // as index starts at 1 // This could be included in the above adjustment d.setDate(d.getDate() + 7 * (week - 1)) return d; } const isSamePeriod = ( lessonWeek, lessonYear, startWeek, startYear, endWeek, endYear ) => { let lesson = yearWeekToDate(lessonYear, lessonWeek); return lesson >= yearWeekToDate(startYear, startWeek) && lesson <= yearWeekToDate(endYear, endWeek) }; // Examples [[47,2021], [48,2021], [50,2021], [ 1,2022], [ 3,2022], [ 4,2022] ].forEach( arr => console.log(`${arr} ${isSamePeriod(...arr, 48,2021, 3,2022)}`) );
檢查需要分開,但第二個嵌套在第一個中。 此外,如果年份匹配,您只需要檢查星期; 看評論:
const isSamePeriod = (
lessonWeek,
lessonYear,
startWeek,
startYear,
endWeek,
endYear
) => {
return (
// Year is valid
(lessonYear >= startYear && lessonYear <= endYear) ||
// Lesson is not in the start year or is late enough in the start year
(lessonYear !== startYear || lessonWeek >= startWeek) ||
// Lesson is not in the end year or is early enough in the end year
(lessonYear !== endYear || lessonWeek <= endWeek)
);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.