Notion Formula ‘now()’ vs ‘today()’: Difference Explained
🔍 WiseChecker

Notion Formula ‘now()’ vs ‘today()’: Difference Explained

When working with dates in Notion databases, you often need to reference the current date or time in your formulas. Two common functions for this are now() and today(). Many users are confused about which one to use because their names sound similar but they return different data types. This article explains the exact difference between now() and today(), how each function works under the hood, and when to use each one.

You will learn the technical behavior of both functions, see step-by-step examples for using them in your database formulas, and understand common pitfalls that lead to incorrect results. By the end, you will be able to choose the correct function for your specific date calculation needs.

Key Takeaways: Notion Formula now() vs today()

  • now() returns a date object with time: Includes the current date and the exact time of the formula evaluation, down to the second.
  • today() returns a date object without time: Returns only the current date with the time component set to midnight (00:00:00).
  • Use now() for time-sensitive calculations: Track deadlines, countdowns, or timestamps where the hour and minute matter.
  • Use today() for calendar-date comparisons: Filter by day, calculate age in whole days, or compare against date properties that also have no time component.

How now() and today() Work in Notion Formulas

Both now() and today() are built-in functions that return the current date. The critical difference lies in the data type they return. Notion stores dates as date objects that include both a date and a time component. The now() function returns a full date-time object with the current time. The today() function returns a date object where the time component is set to 00:00:00 (midnight).

When you use now() in a formula, Notion records the exact moment the formula is evaluated. If you refresh the page or the database recalculates, the time updates to the current moment. This makes now() dynamic — it always reflects the present instant. The today() function behaves similarly, but because the time is always midnight, it changes only when the calendar day changes, typically at midnight in your workspace time zone.

This distinction becomes important when you compare these functions against date properties in your database. A date property in Notion can be set to include or exclude a time. If you compare now() to a date property that has no time (only the date), the comparison may give unexpected results because the time components differ. Similarly, using today() when you need hour-level precision will always show the same value for the entire day.

Technical Behavior of now()

The now() function returns a date object with the current date and time. The time component includes hours, minutes, and seconds. For example, if you evaluate now() at 3:45:22 PM on December 15, 2025, the result is December 15, 2025 15:45:22. If you use now() in a formula that calculates the difference between now and a due date, the result can include fractional days (for example, 1.5 days remaining).

Technical Behavior of today()

The today() function returns a date object with the current date and the time set to midnight. For the same moment as above, today() returns December 15, 2025 00:00:00. When you subtract today() from another date, the result is always a whole number of days because both dates have the same midnight time. This makes today() ideal for counting calendar days without fractional hours.

When to Use now() and today() in Formulas

Choosing the right function depends on what you want to calculate. Use now() when you need the exact time. Use today() when you only care about the date. Below are specific use cases with step-by-step examples.

Use now() for Time-Sensitive Calculations

  1. Create a countdown to a deadline
    Create a formula property named “Time Until Due” and enter: dateBetween([Due Date], now(), "hours"). This returns the number of hours remaining. Because now() includes the current time, the countdown updates every time the formula recalculates, showing hours and fractions of hours.
  2. Calculate age in years with precision
    Use dateBetween(now(), [Birth Date], "years"). This gives a precise age because it considers the current time. A person born at 10:00 AM will turn one year older exactly at 10:00 AM on their birthday, not at midnight.
  3. Log the exact time a status changed
    Combine now() with a formula that triggers on property changes. For example, if(prop("Status") == "Complete", now(), [Created Time]) records the exact completion timestamp.

Use today() for Calendar-Day Comparisons

  1. Filter tasks due today
    Create a formula property named “Due Today” and enter: formatDate(prop("Due Date"), "YYYY-MM-DD") == formatDate(today(), "YYYY-MM-DD"). This compares only the date part, ignoring time. It returns true if the due date falls on the current calendar day.
  2. Calculate age in whole years
    Use dateBetween(today(), [Birth Date], "years"). This returns the age as of today’s date, without considering the time of birth. The result is always a whole number.
  3. Determine if a task is overdue by days
    Use dateBetween(today(), [Due Date], "days"). If the result is positive, the task is overdue by that many full days. Because today() has no time, a task due at 11:59 PM is not overdue until the next calendar day.

Common Mistakes and Misunderstandings

Even experienced Notion users make errors when mixing now() and today() with date properties that have time components. Below are the most frequent issues.

Comparing now() to a Date Property Without Time

If your date property stores only a date (no time), and you compare it to now(), the date property is treated as midnight of that day. The comparison now() > [Date Property] will be true for almost the entire day after the date property’s date, because now() is always later than midnight on the same day. This can make tasks appear overdue hours before the deadline. Use today() instead for fair date-only comparisons.

Using today() When You Need Hour Precision

If you use today() in a countdown formula like dateBetween([Due Date], today(), "hours"), the result will always be a multiple of 24 hours. A task due at 3:00 PM today will show 0 hours remaining at midnight, even though it is not due for 15 hours. Use now() for hour-level precision.

Assuming now() and today() Return the Same Type

Both functions return a date object, but their time components differ. If you use now() in a formula that expects only a date (for example, in a rollup that groups by date), the time component may cause unexpected grouping. Always cast to a date-only format using formatDate() if you need to group by day.

Notion now() vs today(): Key Differences Compared

Item now() today()
Return type Date object with current time Date object with time set to midnight
Time component Includes hours, minutes, seconds Always 00:00:00
Updates frequency Every formula recalculation Once per calendar day
Best use case Countdowns, timestamps, age with precision Daily filters, whole-day overdue, age in years
Formula example dateBetween([Due], now(), "hours") dateBetween([Due], today(), "days")
Works with date-only properties May produce fractional results Produces whole-number results

Understanding these differences helps you avoid calculation errors. now() gives you the exact current moment, while today() gives you the current calendar day starting at midnight. Choose the one that matches your data requirements. For most daily planning and task management, today() is the safer choice because it avoids time-related surprises. For any formula that tracks hours or minutes, always use now().

To test your understanding, try creating a formula that shows “Overdue by X days” using today() and another that shows “Overdue by X hours” using now(). Compare the results for a task due at 3:00 PM. You will see that the day-based formula shows 0 until midnight, while the hour-based formula shows the correct remaining hours. This hands-on test will solidify the difference in your workflow.