はじめに
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日 |
おわりに
今回は、「さまざまな形式の文字列から日付を作成するには?」を解説しました。文字列から数値だけを取り出し、それをうまく日付の形式になる数字に変換するだけでした。