ソースコード
function weekly_lists(y, m){
// 月の日付フォーマットを整形(ゼロパディング)
m = ("0"+m).slice(-2)
// 月の1日の曜日を取得(週)
const dt = new Date(`${y}-${m}-01`)
const firstDayWeek = dt.getDay()
// 第1日曜日を取得(日)
const nextSunday = firstDayWeek ? 1 + 7 - firstDayWeek : 1;
// 月の最終日を取得
const endOfMonth = new Date(dt.setMonth(dt.getMonth()+1, 0)).getDate()
const arr = [{
y : y,
m : m,
from : 1,
to : nextSunday,
}]
for(let i=nextSunday+1; i<=endOfMonth; i=i+7){
arr.push({
y : y,
m : m,
from : i,
to : i + 6 < endOfMonth ? i + 6 : endOfMonth,
})
}
return arr
}
使い方
weekly_lists(y,m)
関数に対して、年と月の値を送るだけで、次のフォーマットで週ごとの情報が返ってきます。
[
{
y : 指定された年,
m : 指定された月,
from : 1,(月の開始日)
to : ※月末の日付
},
...
]
解説
今回のプログラムは、月曜日から日曜日を基準にして、週ごとのデータを配列で取得できるようになっています。
とある、集計レポートで週次処理があったために作ったコードです。
1. 最初の日曜日を取得
これは1日〜最初の日曜日が、配列の1番目になるので、これを手動で取得します。
2. 月の最終日を取得
対象月の月末情報は、先日書いたブログでも解説しています。
[Javascript] ◯年◯月から◯年◯月◯日一覧を取得する関数(対象の年月から、年月日一覧を作成)
const enf_of_month = new Date(dt.setMonth(dt.getMonth()+1, 0)).getDate()
上記のコードで最終日が取得できます。
3. 反復処理の+7で値を取得していく
for(let i=nextSunday+1; i<=endOfMonth; i=i+7){
arr.push({
y : y,
m : m,
from : i,
to : i + 6 < endOfMonth ? i + 6 : endOfMonth,
})
}
最終週のみ、日付がオーバーしないように処理を加えています。
デモ
今月の日曜日を基準にした、週ごとのデータ。