Available in:All versions (Works in Excel 2007, every later version, Microsoft 365 and Excel for the web)Examples need Excel 2021 or laterCategory:Date & time

TODAY

VANDAAG in Dutch Excel

Returns the current date, without a time, and updates it every time the workbook recalculates.

Difficulty rating 1 of 5. No arguments at all; what takes learning is that the value changes every day and has no time part.

Last updated: 13 October 2026

See the worked examples

Sheet excerpt: C2 holds the formula
RowABC
1ConfirmationRequest sentDays outstanding
2BC-0114 Sep 20261616=TODAY() - B2=TODAY() - B2
3BC-0221 Sep 2026
4BC-0328 Aug 2026
Formula cell (C2)InputNote: Results assume today is 30 September 2026 (serial number 46295).

Result: 16

=TODAY() - B2
=TODAY() - B2

What TODAY does and when to use it

What it does: it gives the current date as a serial number, for example to count how many days a bank confirmation request has been outstanding.

When to use it: for anything measured against the current date, such as days until a deadline, days overdue or contracts that expire soon. Use NOW when the time of day matters too.

How Excel evaluates it

When Excel calculates the cell:

  • it reads the date from your computer's clock and returns it as a whole serial number, the count of days since 1 January 1900, with no fraction for the time; 30 September 2026 is 46295
  • it gives the cell a date format if the cell had no format yet
  • from then on it recalculates TODAY whenever anything in the workbook recalculates, including when the file is opened, so tomorrow the same cell shows 46296

If calculation is set to Manual, the value stays as it was until you recalculate.

Watch out: When a report must keep showing the figures as at a fixed date, such as a year-end file, do not use TODAY: type the report date into a cell and refer to that.

Mental model

A tear-off desk calendar that turns its own page: the cell always shows the top sheet, and you never see yesterday's date unless you tear the page off and keep it (paste as values).

Terms used on this page: workbook, serial number, cell

TODAY()
TODAY()

Return value:Today's date as a serial number

Formulas use commas (,) between arguments, as in English Excel. Formulas use semicolons (;) between arguments, as in Dutch Excel. Formulas use commas (,) between arguments, as in English Excel; Dutch Excel uses semicolons (;).

Worked examples

Beginner

Days since a bank confirmation request was sent

For the year-end audit of Veldhuis Installatie BV you sent three bank confirmation requests. Your follow-up list needs a column with the number of days each request has been outstanding, and it must be correct every morning without anyone updating it. The example assumes today is 30 September 2026.

Sheet excerpt: C2 holds the formula
RowABCD
1ConfirmationRequest sentDays outstanding
2BC-0114 Sep 20261616=TODAY() - B2=TODAY() - B2
3BC-0221 Sep 2026
4BC-0328 Aug 2026
5
Formula cell (C2)InputNote: Results assume today is 30 September 2026 (serial number 46295).

Formula in C2

=TODAY() - B2
=TODAY() - B2

Result: 1616

Step by step
  1. TODAY() reads the computer's date. On 30 September 2026 it returns 46295, with no time part.
  2. Excel reads B2: 14 September 2026, stored as serial number 46279.
  3. Excel subtracts: 46295 - 46279 = 16. The request for BC-01 has been outstanding for 16 days.
  4. Copied down, BC-02 (21 September, 46286) gives 46295 - 46286 = 9 and BC-03 (28 August, 46262) gives 46295 - 46262 = 33.
  5. On the day you open the example, TODAY() returns your own date, so your numbers will differ. Tomorrow the same cell shows 17, without anyone touching it.

Watch out: If C2 shows 16-1-1900 instead of 16, the cell carries a date format (Excel sometimes applies one to formulas that refer to dates). Set the cell to General or Number.

More on this example: why it works, 1 more pitfall

Why it works

Dates are day counts, so subtracting one date from another gives the number of days between them. Because TODAY is worked out again on every recalculation, the difference grows by 1 each day.

More to watch out for

  • The result counts calendar days, weekends included. If your firm chases confirmations after a number of working days, use NETWORKDAYS instead.

Intermediate

Days overdue per open invoice, zero if not yet due

You are preparing the receivables aging analysis for a client and have the open invoices from the receivables ledger with their due dates. You need a column with the number of days each invoice is overdue, as the basis for the 30, 60 and 90-day bands.

Invoices that are not due yet, or are due today, must show 0 rather than a negative number. The example assumes today is 30 September 2026.

Sheet excerpt: D2 holds the formula
RowABCDE
1Invoice no.RelationDue dateDays overdue
226-3101D104215 Sep 20261515=IF(TODAY() > C2, TODAY() - C2, 0)=IF(TODAY() > C2; TODAY() - C2; 0)
326-3102D101714 Oct 2026
426-3103D102130 Sep 2026
526-3104D10422 Jul 2026
626-3105D103314 Aug 2026
7
Formula cell (D2)InputNote: Results assume today is 30 September 2026 (serial number 46295).

Formula in D2

=IF(TODAY() > C2, TODAY() - C2, 0)
=IF(TODAY() > C2; TODAY() - C2; 0)

Result: 1515

Step by step
  1. Excel evaluates the test of IF first. TODAY() returns 46295 and C2 holds 15 September 2026, serial number 46280. The test 46295 > 46280 is TRUE.
  2. Because the test is TRUE, IF evaluates the second argument: 46295 - 46280 = 15 days overdue.
  3. Copied to D3, the due date is 14 October 2026 (46309). 46295 > 46309 is FALSE, so IF returns 0. Without IF, D3 would show -14.
  4. D4: the due date is today, 46295 > 46295 is FALSE, so 0. An invoice is not late on its due date.
  5. D5: 2 July 2026 is 46205, so 46295 - 46205 = 90 days. D6: 14 August 2026 is 46248, so 46295 - 46248 = 47 days.
  6. Your own results will be higher, because TODAY() returns the date on which you open the sheet. Every overdue row moves up by 1 each day.

Watch out: An empty due date is read as 0, so the test is TRUE and the row shows 46295 days overdue. This happens when the ledger export has invoices without a due date. Filter those rows out, or test for a blank first.

More on this example: why it works, 1 variation

Why it works

The comparison decides whether an invoice is late at all, and only then is the subtraction used. TODAY() needs no $ signs when the formula is copied down, because it is a function and not a cell reference; only C2 moves with each row.

Variations

=MAX(0, TODAY() - C2)
=MAX(0; TODAY() - C2)

The same result with MAX as a floor: shorter, and TODAY() is called once instead of twice.

AdvancedExcel 2021 or later (This example needs Excel 2021 or later)

Loans that mature within the next 30 days

The client's loan register lists each loan with its maturity date. For the going concern and classification work you want a live list of the loans that mature between today and the number of days in F1, so you can check the repayment plan and the split between current and non-current liabilities.

Loans that have already matured belong on a different list. The example assumes today is 30 September 2026.

Sheet excerpt: F3 holds the formula
RowABCDEFG
1LoanTypeMaturity dateWindow (days)3030
2LN-01Term loan5 Oct 2026
3LN-02Mortgage31 Mar 2027MaturingLN-01=FILTER(A2:A7, (C2:C7 >= TODAY()) * (C2:C7 <= TODAY() + F1), "None")=FILTER(A2:A7; (C2:C7 >= TODAY()) * (C2:C7 <= TODAY() + F1); "None")
4LN-03Car lease29 Sep 2026LN-04
5LN-04Credit facility30 Oct 2026LN-06
6LN-05Equipment loan2 Nov 2026
7LN-06Shareholder loan30 Sep 2026
8
Formula cell (F3)InputSpilled resultNote: Results assume today is 30 September 2026 (serial number 46295).

Formula in F3

=FILTER(A2:A7, (C2:C7 >= TODAY()) * (C2:C7 <= TODAY() + F1), "None")
=FILTER(A2:A7; (C2:C7 >= TODAY()) * (C2:C7 <= TODAY() + F1); "None")

Result: LN-01 / LN-04 / LN-06LN-01 / LN-04 / LN-06

Step by step
  1. Excel evaluates the inner parts first. TODAY() returns 46295, and TODAY() + F1 = 46295 + 30 = 46325, which is 30 October 2026.
  2. The first test compares each maturity date with 46295:

    • LN-01 (46300): TRUE
    • LN-02 (46477): TRUE
    • LN-03 (46294): FALSE (it matured yesterday)
    • LN-04 (46325): TRUE
    • LN-05 (46328): TRUE
    • LN-06 (46295): TRUE (it matures today)
  3. The second test compares each maturity date with 46325:

    • LN-01: TRUE
    • LN-02: FALSE
    • LN-03: TRUE
    • LN-04: TRUE (exactly day 30)
    • LN-05: FALSE (46328)
    • LN-06: TRUE
  4. Multiplying the two arrays works as AND: TRUE × TRUE is 1, anything with FALSE is 0. The include array becomes 1, 0, 0, 1, 0, 1.
  5. FILTER keeps the rows of A2:A7 where that array is 1 and spills LN-01, LN-04 and LN-06 into F3:F5. If no row qualified, it would return None.
  6. Next Monday, 5 October 2026, LN-06 drops off, LN-01 is still listed on its last day, and LN-05 comes in. Your list depends on the day you open the sheet.

Watch out: Writing > TODAY() instead of >= TODAY() silently drops the loan that matures today, LN-06, which is the one most urgently in need of attention.

More on this example: why it works, 1 more pitfall, 1 variation

Why it works

Two comparisons against TODAY() define a moving window, and multiplying them keeps only rows inside both bounds. Because the window is recalculated on every open, the list maintains itself; no one has to edit dates in the formula.

More to watch out for

  • If the maturity dates carry a time (for example 30 October 2026 12:00), the upper test fails for that last day, because 46325.5 is greater than 46325.

Variations

=COUNTIFS(C2:C7, ">=" & TODAY(), C2:C7, "<=" & TODAY() + F1)
=COUNTIFS(C2:C7; ">=" & TODAY(); C2:C7; "<=" & TODAY() + F1)

Only the number of maturing loans (3), for a summary line in your working paper, and it works in versions without FILTER.

MasterExcel 2021 or later (This example needs Excel 2021 or later)

Completed years since acquisition, correct on the anniversary

You are recalculating depreciation from the fixed asset register and first need the number of completed years since each asset was bought. Subtracting years gives one year too many for every asset whose anniversary is later this year, and the count must be right on the anniversary itself. The formula should call TODAY once and read clearly for the next person on the file. The example assumes today is 30 September 2026.

Sheet excerpt: C2 holds the formula
RowABCD
1AssetPurchase dateCompleted years
2Delivery van1 Oct 201966=LET( asOf, TODAY(), bought, B2, years, YEAR(asOf) - YEAR(bought), reached, DATE(YEAR(asOf), MONTH(bought), DAY(bought)) <= asOf, IF(reached, years, years - 1) )=LET( asOf; TODAY(); bought; B2; years; YEAR(asOf) - YEAR(bought); reached; DATE(YEAR(asOf); MONTH(bought); DAY(bought)) <= asOf; IF(reached; years; years - 1) )
3Forklift30 Sep 2019
4Server rack15 Mar 2021
5Warehouse shelving15 Oct 2010
6Laser cutter29 Feb 2016
7
Formula cell (C2)InputNote: Results assume today is 30 September 2026 (serial number 46295).

Formula in C2

=LET(
  asOf, TODAY(),
  bought, B2,
  years, YEAR(asOf) - YEAR(bought),
  reached, DATE(YEAR(asOf), MONTH(bought), DAY(bought)) <= asOf,
  IF(reached, years, years - 1)
)
=LET(
  asOf; TODAY();
  bought; B2;
  years; YEAR(asOf) - YEAR(bought);
  reached; DATE(YEAR(asOf); MONTH(bought); DAY(bought)) <= asOf;
  IF(reached; years; years - 1)
)

Result: 66

Step by step
  1. LET evaluates TODAY() once and stores it as asOf: 46295, 30 September 2026. bought is B2, 1 October 2019.
  2. years is the plain difference of the calendar years: 2026 - 2019 = 7. That is the number the naive formula would show.
  3. reached builds this year's anniversary: DATE(2026, 10, 1), 1 October 2026. It then tests 1 October 2026 <= 30 September 2026, which is FALSE: the anniversary is tomorrow.
  4. The last argument decides: reached is FALSE, so the result is years - 1 = 6 completed years. Tomorrow the same cell shows 7.
  5. Forklift, bought 30 September 2019, reaches its anniversary today: DATE(2026, 9, 30) <= asOf is TRUE, so 7. Warehouse shelving: 2026 - 2010 = 16, anniversary 15 October not reached, so 15.
  6. The laser cutter was bought on 29 February 2016. DATE(2026, 2, 29) rolls over to 1 March 2026, which has passed, so 2026 - 2016 = 10. In non-leap years its anniversary counts from 1 March.

Watch out: The mirror-image mistake is testing reached with < instead of <=. It looks the same, but on the anniversary itself the forklift shows 6 instead of 7, exactly on the day the count changes.

More on this example: why it works, 1 more pitfall, 1 variation

Why it works

The count of years is only complete once this year's anniversary has arrived, and DATE rebuilds that anniversary from today's year and the purchase month and day. LET evaluates TODAY once, so every part of the formula uses the same date.

DATEDIF with unit Y gives the same answer in one call, but Excel itself does not list it in the Insert Function dialog or suggest it while you type, so you get no tooltip for its arguments.

Do not use TODAY here when the figures belong to a fixed moment, such as the balance sheet date of 31 December 2025: replace TODAY() in the formula with a reference to a cell that holds that date, so the numbers stay as they were when you signed them off.

More to watch out for

  • YEAR(TODAY()) - YEAR(B2) on its own is right from the anniversary until 31 December and one year too high before it, so it passes a test run in December and fails in September.

Variations

=YEAR(TODAY()) - YEAR(B2) - (DATE(YEAR(TODAY()), MONTH(B2), DAY(B2)) > TODAY())
=YEAR(TODAY()) - YEAR(B2) - (DATE(YEAR(TODAY()); MONTH(B2); DAY(B2)) > TODAY())

The same logic without LET: TRUE counts as 1 in the subtraction. It works, but calls TODAY three times and is harder to read.

Common mistakes

Common mistakes
SymptomCauseFix
Old day counts in an old reportA report built last month still shows the old day counts, because someone copied the TODAY cell and pasted it as values.Check the formula bar: a live cell shows =TODAY(), a frozen one shows a date. Retype the formula, and keep it out of ranges you paste as values.
The date never changesCtrl+; was used to enter the date, expecting it to update. It never changes.Ctrl+; types today's date as a constant, which is right for a date stamp. Use =TODAY() when the value must move with the calendar.
An entry from today counts as the futureComparing a date and time value with TODAY(): an entry at 14:00 today is greater than TODAY(), so it counts as 'in the future'.TODAY() is midnight at the start of the day. Compare with TODAY() + 1 for 'before tomorrow', or use NOW for time-sensitive checks.
The workbook is slow after every editA large workbook with thousands of TODAY() calls feels slow on every edit.Put =TODAY() once in a cell (or a named cell) and refer to it everywhere. Every formula that depends on a volatile function recalculates with it.