文字列から日付を作成するには?: Notion Formula 解説 (30)

はじめに

Notion Formula の第30回目は、「さまざまな形式の文字列から日付を作成するには?」を解説します。こちらで紹介しています。

数式

数式は以下のようになります。久々に長いので、ブロックごとに解説していきます。

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()
)

まずは、numbers 変数の作成までです。match の引数の「\d+」は1文字以上の数値の並びです。すなわち文字列の中から数字のかたまりを複数個取り出すことになります。これで文字列のリストが返されるので、それを数値に変換しています。

lets(
    /* numbers 変数: 数字だけを取り出した配列 */
    numbers, 
        /* 年月日 の数値を取り出し */
        prop("Name").match("\d+")
            /* 文字列の配列を数値の配列に変更 */
            .map(current.toNumber()),
prop("Name") .match("\d+") numbers
2021/1/23 [”2021”, “1”, “23”] [2021, 1, 23]
2020-12-1 [”2020”, “12”, “1”] [2020, 12, 1]
2019年5月20日 [”2019”, “5”, “20”] [2019, 5, 20]
1/23 [”1”, “23”] [1, 23]
12-1 [”12”, “1”] [12, 1]
5月20日 [”5”, “20”] [5, 20]

次は ymd 変数の作成までです。長さが 2 の時は月と日なので、今日の年の情報をリストの一番先頭に追加します。

 ymd,
        /* 配列の長さが2の場合、先頭に今年を追加 */
        numbers.length() == 2 ? [today().year(), numbers].flat() : numbers,
numbers ymd
[2021, 1, 23] [2021, 1, 23]
[2020, 12, 1] [2020, 12, 1]
[2019, 5, 20] [2019, 5, 20]
[1, 23] [2024, 1, 23]
[12, 1] [2024, 12, 1]
[5, 20] [2024, 5, 20]

最後に ymd の数値リストから日付を作成する部分です。最初の行で、年を 10000 倍、月を 100 倍、日を1倍したリストに変換します。その後、それを加算し、parseDate で日付に変換します。

 /* y を 10000 倍、 m を 100、d はそのままに。*/
    /* 例 [2023, 9, 10] -> [20230000, 900, 10] */
    ymd.map(current * 100^(2-index))
        /* それらを加算。 例 [20230000, 900, 10] -> 20230910 */
        .sum()
        /* 日付に変換 */
        .parseDate()
ymd map sum parseDate
[2021, 1, 23] [20210000, 100, 23] 20210123 2021年1月23日
[2020, 12, 1] [20200000, 1200, 1] 20201201 2020年12月1日
[2019, 5, 20] [20190000, 500, 20] 20190520 2019年5月20日
[2024, 1, 23] [20240000, 100, 23] 20240123 2024年1月23日
[2024, 12, 1] [20240000, 1200, 1] 20241201 2024年12月1日
[2024, 5, 20] [20240000, 500, 20] 20240520 2024年5月20日

おわりに

今回は、「さまざまな形式の文字列から日付を作成するには?」を解説しました。文字列から数値だけを取り出し、それをうまく日付の形式になる数字に変換するだけでした。