週の初めの月曜日・日曜日の日付を得るには?: Notion Formula 解説 (29)

はじめに

Notion Formula の第29回目は、「週の初めの月曜日・日曜日の日付を得るには?」を解説します。週の初めは人によって月曜日・日曜日が異なるので,両方解説します.

今週月曜日を得るには

最近,today() が用意されたので、これが一番簡単に書ける Formula になりました。

/* today() から曜日の数値を得て、その日数から1を引いたものを減算 */
today().dateSubtract(today().day() - 1, "days")

式だけ見ても分かりにくいので、具体的に値がどう計算されるのかを表で確認してみます。day() メソッドは月曜日が 1 なので、1 を引くことですべて月曜日にすることができるわけです。

today() today().day() today().day()-1 全体
6/10(月) 1 0 6/10(月)
6/11(火) 2 1 6/10(月)
6/12(水) 3 2 6/10(月)
6/13(木) 4 3 6/10(月)
6/14(金) 5 4 6/10(月)
6/15(土) 6 5 6/10(月)
6/16(日) 7 6 6/10(月)

指定日の週の初めの月曜日を得るには

これが指定日になった場合には、日付から時刻を消す必要があります。以前説明した parseDate を用いるだけですね。上の式で today() が2回登場するので、let で日付情報を d という変数に一時的に保管しています。

/* 日付プロパティの日付から時刻情報を削り、変数 d に代入 */
let(d, prop("日付").formatDate("YYYY-MM-DD").parseDate(),
  /* d から曜日の数値を得て、その日数から1を引いたものを減算 */
  d.dateSubtract(d.day() - 1, "days")
)

今週日曜日を得るには

同様に今週日曜日を得るものを先に解説します。月曜日が 1 なので、そのまま day() の返り値を引けばいいのです。ただし、そのままだと日曜日が 7 であるため前の週の日曜日になってしまいます。そこで、日曜日の場合に引き算をしないようにするために 7 の剰余を計算するようにします。

/* today() から曜日の数値を得て、その日数を減算(日曜日は7が返却されるので7で割った余りを減算) */
today().dateSubtract(today().day() % 7, "days")

こちらも、具体的に値がどう計算されるのかを表で確認してみます。

today() today().day() today().day() % 7 全体
6/9(日) 7 0 6/9(日)
6/10(月) 1 1 6/9(日)
6/11(火) 2 2 6/9(日)
6/12(水) 3 3 6/9(日)
6/13(木) 4 4 6/9(日)
6/14(金) 5 5 6/9(日)
6/15(土) 6 6 6/9(日)

指定日の週の初めの日曜日を得るには

こちらもが指定日になった場合には、日付から時刻を消す必要があります。月曜日と同じなので説明は省略します。

/* 日付プロパティの日付から時刻情報を削り、変数 d に代入 */
let(d, prop("日付").formatDate("YYYY-MM-DD").parseDate(),
 /* d から曜日の数値を得て、その日数を減算(日曜日は7が返却されるので7で割った余りを減算) */
 d.dateSubtract(d.day() % 7, "days")
)

おわりに

今回は、「週の初めの月曜日・日曜日の日付を得るには?」を解説しました。基本的には day() で返された曜日番号をうまく加工して引き算する作業をするだけです。