逆引きFormula 2.0 に戻る
いつもおなじみ Red Gregory さんの Formula 説明。文字列から日付を作成するという素晴らしいアイディアでした。Red さんのは文字列を切り出しているのですが、これだとフォーマットに縛りがあります。日本人向けに「Y年M月D日」、「Y-M-D」、「Y/M/D」のフォーマットのどれでも対応する汎用性のあるものを作ってみました。ついでに、「月日」だけのものも作りました。ただし、こちらはあくまで相対日付なので、年が変わると違う日付になるので注意してください。
- 数値が二つまたは三つ存在するものならどんな表記でも可能。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()
を入れていたのですが、なくても動くようなので消してしまいました。基本形式だと日付までは数値だけで表現できるので、たくさん応用が効きそうですね。