簡體   English   中英

檢查一周是否在兩周之間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM