首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 計算日期區間自然周數:按週一為起始日、包含結束週邏輯

     編輯:程式設計綜合問答

需求

給定起止日期,按自然周 (週一~週日) 計算周數。起始日若非週一則不計該周,結束日哪怕是週一也算一周。

算法步驟

  1. 將起始日期向後調整到**下一個週一** (若已是週一則保持)。
  2. 計算調整後起始日與結束日的毫秒差。
  3. 周數 = Math.ceil(diffMs / (7 * 24 * 3600 * 1000))。

代碼實現

function countNaturalWeeks(start, end) {
    // start, end 為 Date 對象
    var s = new Date(start);
    var e = new Date(end);
    // 調整到週一 (getDay: 0=Sun, 1=Mon...)
    var day = s.getDay();
    var diff = (day === 1) ? 0 : (8 - day); // 到下一個週一的天數
    s.setDate(s.getDate() + diff);
    if (s > e) return 0;
    var msPerWeek = 7 * 24 * 3600 * 1000;
    return Math.ceil((e - s) / msPerWeek);
}

// 測試
console.log(countNaturalWeeks(new Date(2023,0,2), new Date(2023,0,8))); // 1 (週一~週日)
console.log(countNaturalWeeks(new Date(2023,0,3), new Date(2023,0,8))); // 1 (週二開始,調整到下週一已超過結束日? 需確認邏輯)

注意

若起始日為週二,調整到下週一可能超過結束日,返回 0 符合「不計不完整周」語義。具體業務可微調。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved