Use dateBetween(prop("End Date"), prop("Start Date"), "days") to calculate the day difference between two Notion Date properties. Put the end date first for a positive start-to-end interval. Keep both source fields, and add the calculation as a separate Formula property so you can inspect the dates when a result surprises you.
Notion's dateBetween reference documents the units and shows that reversing the dates reverses the sign. For an educational date-only example, January 14 to March 3, 2024 is 49 elapsed days. Counting both endpoint dates would answer a different question.
Calculate the gap between two Date properties
Start in a database where you can add or edit properties. Notion’s Can edit content permission allows changes to pages and property values, but not to the database’s structure or properties. If the property controls are unavailable, work with the database owner before changing the setup.
Use two properties with the Date type, named Start Date and End Date. A text field that looks like a date is still text. I would start with actual Date properties rather than adding text parsing to a simple duration calculation.
If the input fields do not exist, add each through Edit properties → New property and choose Date. The same property-management controls let you inspect an existing field before reusing it. Keep the following three roles separate:
| Property | Type | What you enter |
|---|---|---|
| Start Date | Date | The interval’s starting date |
| End Date | Date | The interval’s ending date |
| Days between | Formula | The expression below; the number is calculated |
- At the top of the database, select the slider icon.
- Choose Edit properties → New property → Formula.
- Name the property Days between, then select Edit formula.
- Enter the formula below, using the exact names of your two Date properties.
If your inputs are named Kickoff and Completed, replace "Start Date" and "End Date" in both the guard and the calculation. The editor’s properties list shows available fields. Adapt the expression to your database rather than renaming live fields just to match this example.

The documented formula setup path adds a calculated field alongside your existing properties. This version checks for missing inputs before calculating:
if(
or(empty(prop("Start Date")), empty(prop("End Date"))),
empty(),
dateBetween(prop("End Date"), prop("Start Date"), "days")
)
Read the last line as End Date minus Start Date, measured in days. The surrounding if returns an empty value when either input is missing. Notion documents checking date inputs with if and returning empty() before a date operation; or makes either missing date sufficient to skip this calculation.
Open the formula editor from a database row to use its live preview for that row. Check a row whose dates you understand, rather than judging the formula from a database full of unknown or incomplete values.
Interpret positive, negative, zero, and empty results
The following are educational arithmetic cases for the guarded formula above, with date-only inputs.
| Start Date | End Date | Result | Meaning |
|---|---|---|---|
| January 14, 2024 | March 3, 2024 | 49 | The end is 49 days after the start. |
| March 3, 2024 | January 14, 2024 | −49 | The end precedes the start; check whether that ordering was intentional. |
| January 14, 2024 | January 14, 2024 | 0 | The dates have no elapsed-day gap. |
| January 14, 2024 | Empty | Empty | The guard skips a row with a missing input. |
The 49-day example includes February 29 because 2024 is a leap year: January 14 to February 14 contributes 31 days, and February 14 to March 3 contributes 18. The source dates stay intact; the Formula property carries the calculated gap.
A zero is a valid difference. Keep the empty checks on the input dates, as shown, rather than wrapping the final number in empty(...). In Notion, the empty function treats 0 as empty, so a check on the calculated number could mistake a legitimate zero for a missing result.
A negative value can reveal an incorrect start or end date. I would investigate that ordering before forcing every result positive: hiding the sign makes a backwards project interval harder to notice.
For your first check, use a separate example row so you do not have to erase a real project’s dates. Enter the same date in both Date fields with Include time off, then open this row’s formula editor: the date-only gap should be zero. Leave one input empty in another example row to check the guard.
| Observation | Discriminating check | Action and expected change |
|---|---|---|
| Blank result | Does either Date input have no value? | Populate the missing input only when the date is known. With both inputs present, the guarded expression takes its calculation branch; a missing date deliberately stays blank. |
| Unexpected negative number | Inspect the actual start/end values and the order of the arguments. | Correct a mistaken date or property reference. Keep End first and Start second for a positive forward interval; preserve negative values when the ordering is intentional. |
| Same-date row appears blank | Did a modified formula check empty on the calculated number? | Return the empty checks to the inputs. Zero should remain a valid result when both date-only inputs are equal. |
| Editor reports an error | Compare the names, Date types, quoted "days" unit and parentheses with the expression. | Repair the mismatched name, type or syntax before interpreting a number. A date-looking string needs a type decision, not an arithmetic adjustment. |

If the dates live in one Date range
You do not need separate properties when your database already uses one range. In a Date property named Dates, open the date picker and enable End date to enter both endpoints. Notion's Date-property instructions describe the End date option.
For that structure, use dateStart and dateEnd to extract the endpoints:
if(
empty(prop("Dates")),
empty(),
dateBetween(dateEnd(prop("Dates")), dateStart(prop("Dates")), "days")
)
Notion's current range examples use dateEnd first and dateStart second for a positive duration. Older tutorials may use end() and start(); follow the current function names. Enter a real end date when you mean a multi-day interval, and compare both endpoints in the row preview.

Choose the source structure that suits your database. Separate fields make distinct start and completion dates easy to inspect; a range keeps one planned period together. Both can feed a separate calculated gap.
Choose the unit and counting rule
The official unit list is "years", "quarters", "months", "weeks", "days", "hours", and "minutes". Change the quoted unit in the formula to the one you need. Use the lowercase, plural spelling shown in the reference.
For a project measured in days, keep "days". For a timed event, "hours" or "minutes" can make the interval easier to interpret. Do not replace calendar months with an assumed 30 days: months vary in length, and a month-based question is different from a total-day count.
Decide what the number should mean before changing the formula. A date-only interval from January 14 to March 3, 2024 has 49 elapsed days. A calendar-date count that includes both endpoints has 50 dates. Adding one is appropriate only for that explicit inclusive rule with an ordered, date-only interval; it is not a general repair for a surprising result. The formula above also counts weekends—it does not calculate business days or exclude holidays.
If your properties include times, inspect them before interpreting a day result. Notion's Date picker has Include time and Date format & timezone controls. Two calendar dates alone do not describe the whole interval when their timestamps differ. For a result that appears one day short, follow the focused dateBetween counting and timestamp checks before adding a correction.
Calculate days until a deadline
For a countdown, replace the starting input with the current date. Use today() for the current date without a time, or now() when the current time matters; Notion documents that distinction. A date-only countdown using a Date property named Due Date is:
if(
empty(prop("Due Date")),
empty(),
dateBetween(prop("Due Date"), today(), "days")
)
With date-only inputs, a positive number means the deadline is ahead, zero means it is today, and a negative number means it is in the past. This is a changing countdown, whereas Start Date to End Date is a fixed interval for unchanged inputs. Keep separate Formula properties if you need both.
If the editor reports an error, check property names, Date types, missing values, parentheses, and the quoted unit first. If one input is actually a formatted string, relation, or rollup list, use the date formula type checks to identify what the function is receiving. Fix the source type before changing the arithmetic.