逆引きFormula 2.0 に戻る
Notion しゅふ会にて以下の質問がありました。
週番号から、その週の月曜日の日付を取得するフォーミュラって、どう書いたらいいのでしょう?
週は月曜始まりで、年はその年のものでいいという話だったので、すでに存在する二つの逆引き記事を紹介しました。
後者のものを使って、今日の曜日番号を取得できるので、その数値と与えられた週番号との差分を使うと計算できそうです。面白そうなので、この記事も作ることにしました。一つだけ懸念があって、1/1 が月曜日でなければ、前の年の日付が月曜日になるので、週番号が 53 になります。1 だけは次の年の月曜日が出てしまう可能性もありそうです。
今週の月曜日を取得したのちに週番号との差分を加算する
lets(
/* 現在時刻から今日の日付を作成し、変数 td に代入 */
td, now().formatDate("YYYY-MM-DD").parseDate(),
/* td から曜日を減算し、今週の月曜日の日付を作成し、変数 md に代入 */
md, td.dateSubtract(td.day() - 1, "days"),
/* md からその週の週番号を計算し、変数 wn に代入 */
wn, md.week(),
/* 週番号プロパティとの週差分を調整 */
md.dateAdd(prop("週番号") - wn, "weeks")
)
→ nowformatDateparseDatedateSubtractday-, subtractweekdateAdd
parseDate を調べていたら週番号で日付が作れることがわかった。上の苦労はなんだったのか
/* 週番号を二桁にした文字列を wnum にする */
let(wnum,
/* 週番号に100を足したものを3桁の文字列に変換 */
(prop("週番号")+100).format()
/* 先頭の1を外して2桁の数字にする -> wnum に代入 */
.substring(1),
/* 現在の年と週番号を -W を使って連結 (例: 2023W01) */
[now().year(), wnum].join("W")
/* ISO8601 の週番号文字列を日付に変換 */
.parseDate()
)