プレミアムフライデーで学ぶJavaScript🍤
-
プレミアムフライデーを求める関数は以下のようになります。
function premium(year, month) {
const d = new Date(year, month, 0);
const w = d.getDay();
return new Date(year, month, -(w + 2) % 7);
}
実行。
console.log(premium(2018, 12)); // 2018-12-28T00:00:00.000Z
console.log(premium(2019, 1)); // 2019-01-25T00:00:00.000Z
2018 年 12 月のプレミアムフライデーは 28 日、2019 年 1 月のプレミアムフライデーは 25 日。うまく動いています。
もうすこし詳しく
Date
の構文はつぎのようになります。
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
year
は年を表す整数値。
monthIndex
は月を表す整数値。ただし、1 月は 0
、12 月が 11
、というように月のインデックスであることには注意が必要です。
day
は 1 ヶ月の日を表す整数値。ただし、0
以下が指定されると前の月の最終日から day
日前の Date インスタンスを返します。
これらをふまえて premium
関数を 1 行ずつみてみます。
1行目
function premium(year, month)
対象となる年と月を取得。
2行目
const d = new Date(year, month, 0);
対象月の最終日の Date
インスタンスを取得。
3行目
const w = d.getDay();
対象月の最終日の曜日(0 ~ 6)を取得。
4行目
return new Date(year, month, -(w + 2) % 7);
最終日から -(w + 2) % 7
日前の Date
インスタンスを返す。
{width=932 height=628}
余談
プレミアムフライデーかどうかを判別する機会があり、そのときに上記のプレミアムフライデーを求める関数を知りました。ぱっとみただけでは動きがわからなかったため、本記事で詳しい動きを追ってみました。
ついでに、プレミアムフライデーを扱うためのライブラリを npm に公開しました。