逆引きFormula 2.0 に戻る
いつもおなじみ Red Gregory さんの Formula 説明。文字列から日付を作成するという素晴らしいアイディアでした。Red さんのは文字列を切り出しているのですが、これだとフォーマットに縛りがあります。日本人向けに「Y年M月D日」、「Y-M-D」、「Y/M/D」のフォーマットのどれでも対応する汎用性のあるものを作ってみました。ついでに、「月日」だけのものも作りました。ただし、こちらはあくまで相対日付なので、年が変わると違う日付になるので注意してください。
https://twitter.com/RedGregory1/status/1518214997813473281
数値が二つまたは三つ存在するものならどんな表記でも可能。Formula 2.0 の match, parseDate を使いました。
lets(
/* numbers 変数: 数字だけを取り出した配列 */
numbers,
/* 年月日 の数値を取り出し */
prop("Name").match("\\d+")
/* 文字列の配列を数値の配列に変更 */
.map(current.toNumber()),
/* ymd 変数, [年, 月, 日]の配列、年がなければ今年の年を追加 */
ymd,
/* 配列の長さが2の場合、先頭に今年を追加 */
numbers.length() == 2 ? [today().year(), numbers].flat() : numbers,
/* y を 10000 倍、 m を 100、d はそのままに。*/
/* 例 [2023, 9, 10] -> [20230000, 900, 10] */
ymd.map(current * 100^(2-index))
/* それらを加算。 例 [20230000, 900, 10] -> 20230910 */
.sum()
/* 日付に変換 */
.parseDate()
)
P.S.
田原さんに数値のままでも parseDate が動くことを教えてもらいました。上の formula は sum()
の後に文字列に変換する .format()
を入れていたのですが、なくても動くようなので消してしまいました。基本形式だと日付までは数値だけで表現できるので、たくさん応用が効きそうですね。