javascriptで日付から月ごとの週数を取得する
2022-04-28 08:29:44 以下は古い方法
code:ts
import { getWeek } from "../date-fns/mod.ts";
alert(getWeek(new Date(2022,3,23)));
/icons/javascript.iconで日付から月ごとの週番号を取得する 目的
実装
日付と週数の対応を定義する
takker.icon的には日曜日にしたい
月の始まりに応じた週数の対応
MM-01が
日曜日
MM-01からMM-week1
月曜日 - 水曜日
その週の日曜日からMM-week1
木曜日 - 土曜日
次週の日曜日からMM-week1
↑の定義に基づいて、日時から週数を算出する函数を作る
その月で何周目かは、これで計算できそう
floor((日付 + MM-01の曜日を表す番号) / 7)
code:weekNumber.js
const WEDNESDAY = 3;
export function weekNumber(date) {
//指定した日付の月初めの日を取得する
const firstDate = new Date(date.getFullYear(), date.getMonth(), 1);
// 月間カレンダーの一週目を1としたときの値
let resultWeek = Math.floor((date.getDate() + firstDate.getDay()) / 7 ) + 1;
let resultMonth = date.getMonth();
let resultYear = date.getFullYear();
// YYYY-MM-01が先週に含まれるときは、週番号を一つ減らす
if (firstDate.getDay() > WEDNESDAY ) {
resultWeek--;
if (resultWeek == 0) {
resultMonth--;
// 先月の週数を取得する
let lastDate = new Date(firstDate);
lastDate.setDate(lastDate.getDate() - 1);
const lastMonth1 = new Date(date.getFullYear(), date.getMonth() - 1, 1);
resultWeek = Math.floor((lastDate.getDate() + lastMonth1.getDay()) / 7 ) + 1;
}
}
const next1 = new Date(date.getFullYear(), date.getMonth() + 1, 1);
// resutlWeek = 5のときは、来月に繰り越される可能性がある
if (resultWeek == 5 && next1.getDay() <= WEDNESDAY) {
resultWeek = 1;
resultMonth++;
}
//年と月を調節
if (resultMonth < 0) {
resultMonth += 12;
resultYear--;
}
if (resultMonth > 11) {
resultMonth -= 12;
resultYear++;
}
}
Reference
こっちで考えたほうが楽かも
週始まりは日曜日にずらす