📝

[GAS]隔週に一回、何週目などを判定したい[Momentjs]

2023/08/29に公開

https://qiita.com/items/fc45214cf5f60a021bfd


お詫び

Qiitaの元記事にて、区切り線を「---」で書いている場所があり、これがZennの記法に干渉して一部うまく表示できない記事がある事を認識しています。
全ての記事を精査しきれていないため、お手数ですがお見かけの際は教えていただけると大変喜びます。


ソースコードで解説します。
Momentに詳しくない私のために、考え方をコメントに添えています。

var today = moment();

// 隔週の場合、今日が一年で何週目か分かれば、2で割れば隔週が求められる
var week = today.week() % 2;

// 月の1週目などの指定がある場合、月初めが何曜日で今日が何日目か分かれば何周目か求められる
var first_day = moment(today.format("YYYY/MM/DD")).date(1);  // 今月1日
var today_week = Math.ceil((first_day.day() + today.date())/7);    // 日曜日の1日は1、土曜日の1日は7になる
if(today_week == 1 && today.day() == 0) // 一周目の日曜日の場合

// 一回目の日曜日を検出したい場合、1日が何曜日か求めて、1週目と2週目の可能性を追求すれば分かる
var target_week = (first_day.day() == 0) ? 1 : 2;
if(today_week == target_week) // 一回目の日曜日の場合  

解説

この記事を読んでいる方は面倒くさがりな方[1]だと思いますが、コメントを読んでフローチャートを書けば難しい話ではない事がわかります。
本稿では考え方について触れたいのでmomentを使用していますが、momentである必要はないです。

実践例

GASで毎日ゴミの日を通知する

脚注
  1. 【面倒くさがり】プログラマーとしては良いことだと思います。 ↩︎

GitHubで編集を提案

Discussion