JavaScriptで開始年月(yyyymm)と終了年月の間の年と月のListを自動作成する方法

Yyyymm

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、JavaScriptで開始年月(yyyymm)と終了年月の間の年と月のListを自動作成する方法について解説していきます。

開始年月(yyyymm)と終了年月の間の年と月のListを自動作成する

開始年月と終了年月(yyyymmの形)の情報から年月のデータセットを作成するSampleCodeを2つ紹介します。

1つは順々にfor文で処理するバージョンで、もう1つは関数にまとめたバージョンです。

開始年月(yyyymm)と終了年月の間の年と月のListを作成する処理

処理のポイントは、次の4点です。

  1. 開始年月と終了年月のデータ(yyyymmの形)から年・月を分離して取得する。
  2. 開始年月のデータから開始年 & 開始月のデータセットを作成する。
  3. 開始年と終了年の間の年のデータセットを作成する。
  4. 終了年月ののデータから終了年 & 終了月のデータセットを作成する。
// [ 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!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

最近の投稿