こんにちはフロントエンドエンジニアのまさにょんです!
今回は、JavaScriptで開始年月(yyyymm)と終了年月の間の年と月のListを自動作成する方法について解説していきます。
目次
開始年月(yyyymm)と終了年月の間の年と月のListを自動作成する
開始年月と終了年月(yyyymmの形)の情報から年月のデータセットを作成するSampleCodeを2つ紹介します。
1つは順々にfor文で処理するバージョンで、もう1つは関数にまとめたバージョンです。
開始年月(yyyymm)と終了年月の間の年と月のListを作成する処理
処理のポイントは、次の4点です。
- 開始年月と終了年月のデータ(yyyymmの形)から年・月を分離して取得する。
- 開始年月のデータから開始年 & 開始月のデータセットを作成する。
- 開始年と終了年の間の年のデータセットを作成する。
- 終了年月ののデータから終了年 & 終了月のデータセットを作成する。
// [ JavaScriptで開始年月(yyyymm)と終了年月の間の年と月のListを自動作成する ]
// 1. min:yyyymm, max: yyyymm
let yyyyMmData = {min: '202207', max: '202508'};
const yyyyMmList = [];
// 2. 開始年 & 開始月
const startYear = yyyyMmData.min.substring(0, 4);
let startMonth = Number(yyyyMmData.min.substring(4, 6));
// 3. 終了年 & 終了月
const lastYear = yyyyMmData.max.substring(0, 4);
let lastMonth = Number(yyyyMmData.max.substring(4, 6));
// 5. 開始年のData作成
let startYearMonthData = {year: '', month: []};
startYearMonthData.year = startYear;
// startMonthから始まって、その年の12月までの Monthを投入する
// 12以上になったらループ終了(12まではtrue)
for (let month = startMonth; month <= 12; month++ ) {
startYearMonthData.month.push(month);
}
yyyyMmList.push(startYearMonthData);
// 6. 開始年と終了年の間の年のData作成
// 1月から12月までのListを作成する
for (let year = Number(startYear) + 1; year < Number(lastYear); year++) {
let yearMonthData = {year: '', month: []}; // 初期化処理
yearMonthData.year = String(year);
for (let month = 1; month <= 12; month++ ) {
yearMonthData.month.push(month);
}
yyyyMmList.push(yearMonthData);
}
// 7. 終了年のData作成
let lastYearMonthData = {year: '', month: []};
lastYearMonthData.year = lastYear;
for (let month = 1; month <= lastMonth; month++ ) {
lastYearMonthData.month.push(month);
}
yyyyMmList.push(lastYearMonthData);
console.log({yyyyMmList});
JavaScriptで開始年月(yyyymm)と終了年月の間の年と月のListを作成する関数
// [ JavaScriptで開始年月(yyyymm)と終了年月の間の年と月のListを自動作成する ]
// 1. min:yyyymm, max: yyyymm
let yyyyMmData = {min: '202207', max: '202508'};
const yyyyMmList = [];
// 2. 開始年 & 開始月
const startYear = yyyyMmData.min.substring(0, 4);
let startMonth = Number(yyyyMmData.min.substring(4, 6));
// 3. 終了年 & 終了月
const lastYear = yyyyMmData.max.substring(0, 4);
let lastMonth = Number(yyyyMmData.max.substring(4, 6));
// 4. createYyyyMmData (年, 開始月, 終了月) => 実行結果: { year: string; month: number[] }[]
function createYyyyMmData (year, startMonth, lastMonth) {
let yearMonthData = {year: '', month: []};
yearMonthData.year = String(year);
let limit = Number((lastMonth ? lastMonth : 12));
for (let month = startMonth; month <= limit; month++ ) {
yearMonthData.month.push(month);
}
return yearMonthData;
}
// 5. 開始年のData作成
yyyyMmList.push(createYyyyMmData(startYear, startMonth, 12));
// 6. 開始年と終了年の間の年のData作成
for (let year = Number(startYear) + 1; year < Number(lastYear); year++) {
yyyyMmList.push(createYyyyMmData(year, 1, 12));
}
// 7. 終了年のData作成
yyyyMmList.push(createYyyyMmData(lastYear, 1, lastMonth));
console.log('yyyyMmList', yyyyMmList);
JavaScript書籍 Ver. 中級-上級者向け
JavaScript書籍 Ver. 初級者向け
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!