ADVERTISEMENT

【Notion】Notion数式で日数計算が合わない時の日付関数確認

【Notion】Notion数式で日数計算が合わない時の日付関数確認
🛡️ 超解決

Notionの数式で日数計算を行おうとした際、予想と異なる結果になることがあります。例えば、開始日から終了日までの日数を求めたいのに「1日ずれる」「マイナスになる」「計算されない」といったトラブルは、日付関数の使い方やプロパティ設定に原因があるケースが大半です。この記事では、Notionの日付関数が正しく動作しない原因を切り分け、正しい計算式を構築するための具体的な手順を解説します。

【要点】この記事で確認すること

  • 最初に見る場所: 数式で使っているプロパティのタイプが「日付」か「テキスト」か、あるいは「作成日」などの自動プロパティかを確認します。
  • 切り分けの軸: 日付関数の引数の順序(開始と終了のどちらが先か)、時間単位の扱い(日単位か時間単位か)、タイムゾーン設定の影響をチェックします。
  • 注意点: 会社の共有ワークスペースでは、データベースのプロパティ設定を勝手に変更すると他のメンバーに影響するため、事前に管理者やチームに確認してください。

ADVERTISEMENT

1. 日付関数の基本とよくある間違い

Notionの数式で日数計算に使う代表的な関数はdateBetweenです。この関数は、第一引数に「終了日」、第二引数に「開始日」、第三引数に単位(“days”や”hours”など)を指定します。多くのユーザーが「開始日から終了日までの日数」を求めたい場合に、引数の順序を逆にしてしまい、マイナスの値が返る間違いを起こします。

また、dateSubtractdateAddを使った加減算でも、日付プロパティそのものに文字列が入っているとエラーになります。さらに、now()関数は常に現在時刻を返すため、タイムゾーンの影響で想定より1日前後することがあります。

関数 正しい使い方 よくある間違い
dateBetween dateBetween(終了日, 開始日, “days”) dateBetween(開始日, 終了日, “days”) → 負の値
dateAdd dateAdd(日付, 1, “days”) dateAdd(日付, “1”, “days”) → 文字列エラー
now() 単独で現在時刻取得 タイムゾーン未考慮で一日ずれ
お探しの解決策が見つからない場合は、こちらの「Notionトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

2. 日数計算が合わない原因を切り分ける

2.1 プロパティのタイプを確認する

まず、数式で参照しているプロパティが本当に「日付」タイプかを確認します。テキストプロパティに日付形式の文字列が入っていても、Notionの数式はそれを日付として扱いません。日付プロパティのアイコンはカレンダー型です。もし「作成日時」や「最終編集日時」を使う場合も、自動で日付タイプになりますが、タイムスタンプまで含むため、日単位の計算では時間差が影響することがあります。

2.2 タイムゾーンの影響を考慮する

Notionのクラウド環境はUTCを基準としています。日本のJST(UTC+9)で作成した日付と、現在時刻now()を比較すると、時間帯によっては日付が前後します。例えば、日本時間の午前1時にnow()を取得すると、UTCでは前日の16時になるため、日付計算で1日ずれることがあります。この問題は、数式内でdateAdd(now(), 9, "hours")のように調整するか、そもそも日付のみを比較する場合はformatDateで文字列変換してから比較する方法が考えられます。

2.3 引数の順序と単位を再確認する

先述の通り、dateBetweenは第一引数(終了日)から第二引数(開始日)を差し引きます。単位の指定も正確に行う必要があります。”days”と”hours”を混同すると意図しない数値になります。また、dateBetweenの代わりにend - startのような演算子は使えません。必ず専用関数を使います。

3. 日数計算を正しく行うための実践手順

  1. プロパティを作成する: データベースに「開始日」「終了日」という名前の「日付」タイプのプロパティを追加します。必ず「日付」を選び、「日付のみ」か「日時」かを用途に応じて選択します。日数計算だけなら「日付のみ」で十分です。
  2. 数式プロパティを作成する: 新しいプロパティを追加し、タイプを「数式」にします。数式エディタに次のように入力します。dateBetween(prop("終了日"), prop("開始日"), "days")
  3. テストデータを入力する: 開始日に「2025/4/1」、終了日に「2025/4/10」を入力します。結果が「9」と表示されることを確認します(開始日を含まない日数)。もし「10」を期待する場合は、+1を加えます。
  4. 空のプロパティに対応する: 開始日か終了日が未入力の場合、数式はエラーになります。その場合はif(empty(prop("開始日")) or empty(prop("終了日")), "", dateBetween(...))のように条件分岐を入れます。
  5. タイムゾーンを調整する: もしnow()を使って「今日までの日数」を計算する場合、dateBetween(now(), prop("日付"), "days")では時間差で誤差が出ることがあります。その場合はdateBetween(dateAdd(now(), 9, "hours"), prop("日付"), "days")のようにJSTに補正します。

4. 時間単位や営業日計算の注意点

日数ではなく時間数を計算したい場合は、dateBetween(..., "hours")とします。ただし、NotionのdateBetweenは営業日(平日のみ)を計算する機能はありません。もし営業日を数えたい場合は、週末を除外するロジックを自力で組む必要がありますが、Notionの数式だけではかなり複雑になります。回避策として、別途「営業日フラグ」プロパティを用意して手動で管理するか、外部ツールとの連携を検討します。

5. 失敗パターンと回避策

5.1 数式がエラーになる

空白の日付プロパティを参照すると、数式は「計算できません」と表示されます。回避策として、先述のif文で空チェックを行います。また、数式内でプロパティ名を間違えている場合もエラーになります。プロパティ名は正確に記述しましょう。

5.2 結果が期待より1日少ない/多い

例えば、開始日4/1、終了日4/2でdateBetweenを使うと「1」になります。これは開始日を含まないからです(終了日-開始日=1日)。もし「2」にしたい場合は、dateBetween(...)+1とします。また、タイムゾーンが原因で日付が前後している場合も同様のずれが生じます。

5.3 自動プロパティ「作成日時」との計算

「作成日時」はUTCタイムスタンプで保存されます。これと手動で入力した日付(日本時間)を比較するときは、先にdateAddで時差を補正しないと計算が合いません。例えば、手動日付が「日付のみ」の場合、自動プロパティ側は時間情報を含むため、formatDateで日付部分だけ取り出す方法もありますが、数式が複雑になるため、できるだけ同じ形式で管理することをおすすめします。

6. 管理者へ確認すべきこと

会社のワークスペースでNotionを利用している場合、以下の点を管理者やチームリーダーに確認することをおすすめします。

  • タイムゾーン設定: ワークスペース全体のタイムゾーンはどこに設定されていますか? メンバーの所在地が異なる場合、日付計算の基準が統一されていないと混乱します。
  • データベーステンプレート: 既存のテンプレートに日数計算の数式が組み込まれている場合、その仕様を理解した上で修正する必要があります。テンプレートを変更する場合は、影響範囲を確認してください。
  • 数式の共有: 正しい数式が完成したら、チーム内で共有し統一することで、ばらつきを防げます。

7. よくある質問

Q1. 日付の差が「-1」と表示されるのはなぜ?

dateBetweenの引数の順序が逆になっています。終了日を第一引数、開始日を第二引数にしてください。

Q2. 日数が「0」になるのはなぜ?

開始日と終了日が同じ日付になっていませんか? 例えば、両方とも2025/4/1なら0になります。もし1日とカウントしたい場合は+1を足してください。

Q3. 数式に「エラー」と出るのはなぜ?

プロパティ名が間違っているか、参照しているプロパティが日付型ではありません。プロパティ名の先頭・末尾のスペースや全角文字にも注意してください。

Q4. 営業日だけの日数を計算したい

Notion標準の数式では営業日計算はできません。代替案として、休日テーブルを別途作成し、フィルターやロールアップでカウントする方法がありますが、実装は複雑です。現状では手動で管理するか、サードパーティプラグインを検討してください。

まとめ

Notion数式で日数計算が合わない場合、まずはプロパティのタイプ、引数の順序、タイムゾーンを確認することが重要です。特にdateBetween関数の引数は「終了日」「開始日」の順であることを忘れがちです。また、会社で使用する際は、ワークスペース全体の設定やテンプレートの統一を図ることで、チームメンバー間の誤差を防げます。正しい数式を構築し、必要に応じて条件分岐やタイムゾーン補正を加えることで、正確な日数計算が可能になります。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

🧩
Notionトラブル完全解決データベース 共有、権限、データベース、Notion AI、インポートで止まる問題を横断的に確認できます。

ADVERTISEMENT