1年分のDateオブジェクトを月単位の配列で取得する JS

文章で説明するのが難しいけど、 家計簿っぽいものを作ってると今日の日付から 1 年前までの月単位の Date オブジェクトの配列データが欲しかったりする。

今日が、2018 年 10 月 20 日だとすると

[
  Sat Oct 20 2018 00:00:00 GMT+0900 (日本標準時) {},
  Thu Sep 20 2018 00:00:00 GMT+0900 (日本標準時) {},
  Mon Aug 20 2018 00:00:00 GMT+0900 (日本標準時) {},
  Fri Jul 20 2018 00:00:00 GMT+0900 (日本標準時) {},
  Wed Jun 20 2018 00:00:00 GMT+0900 (日本標準時) {},
  Sun May 20 2018 00:00:00 GMT+0900 (日本標準時) {},
  Fri Apr 20 2018 00:00:00 GMT+0900 (日本標準時) {},
  Tue Mar 20 2018 00:00:00 GMT+0900 (日本標準時) {},
  Tue Feb 20 2018 00:00:00 GMT+0900 (日本標準時) {},
  Sat Jan 20 2018 00:00:00 GMT+0900 (日本標準時) {},
  Wed Dec 20 2017 00:00:00 GMT+0900 (日本標準時) {},
  Mon Nov 20 2017 00:00:00 GMT+0900 (日本標準時) {}
]

こんな Date オブジェクトが入った配列が欲しい時

これは下記で取得できる

[...Array(12)].map((_, index) => {
  const today = new Date();
  return new Date(
    today.getFullYear(),
    today.getMonth() - index,
    today.getDate()
  );
});

手順的には、

  • [...Array(12)][undefined, undefined, ...]が取れて、それを map する(今回は 12 ヶ月分の配列が欲しいので)
  • new Date(年, 月, 日)で指定した日付の Date オブジェクトが取れるので、today.getMonth() - indexで月をデクリメントしつつ  返してあげる

単純だけど、一瞬あれどうだっけ?となるのでメモ。