10.1 Current Date, Time, & Day-of-Week Functions: NOW, TODAY, & WEEKDAY
Key Takeaways
- Excel stores dates as whole-number serials counting from January 1, 1900 (serial 1) and stores time as the fractional remainder of a 24-hour day, so July 4, 2026 at noon is the number 46207.50.
- TODAY() returns a date-only serial and NOW() returns a date-plus-time serial; both take empty parentheses and neither accepts an argument.
- Both functions are volatile: they refresh on every recalculation event rather than ticking live, which is why a workbook containing them prompts to save on close even when nothing was typed.
- Ctrl+; inserts a frozen date literal and Ctrl+Shift+; inserts a frozen time literal — the correct tools whenever a stamp must never change.
- WEEKDAY(date, 2) numbers Monday as 1 through Sunday as 7, making =WEEKDAY(A2,2)>5 a reliable weekend test; the default return_type 1 starts at Sunday and misclassifies every Sunday.
Current Date, Time, & Day-of-Week Functions: NOW, TODAY, & WEEKDAY
Enterprise financial schedules, project management baselines, supply chain pipelines, and regulatory reporting calendars depend heavily on accurate temporal calculations. In Microsoft Excel, date and time arithmetic is governed by an internal serial numbering engine. Rather than treating calendar entries as arbitrary text strings, Excel converts every date and time into a precise numerical coordinate along a continuous timeline. Mastering that serial architecture — and the three functions MO-211 names for anchoring and classifying a single date, NOW, TODAY, and WEEKDAY — is the foundation for every business date formula that follows.
The 1900 Date Serial System & Fractional Time Architecture
By default, Excel for Windows and Excel for Microsoft 365 utilize the 1900 Date System. Under this system:
- Whole Days as Integers: Day
1corresponds to January 1, 1900. Every subsequent calendar day increments this integer by exactly1. For example, July 4, 2026 corresponds to the serial number46207. - Time as Fractional Days: Time is stored as a decimal portion of a 24-hour day. Because one full day equals
1.0, individual hours, minutes, and seconds are represented as fractions:1 Hour= $1 / 24 \approx 0.041667$6:00 AM= $6 / 24 = 0.25$12:00 PM (Noon)= $12 / 24 = 0.50$6:00 PM= $18 / 24 = 0.75$8 Hours (Standard Shift)= $8 / 24 = 1/3 \approx 0.333333$
A combined date-time timestamp such as July 4, 2026, 12:00 PM is stored internally as the floating-point number 46207.50. Adding 1 advances the timestamp by 24 hours, whereas adding 0.5 advances it by 12 hours.
[!NOTE] Historical Legacy Bug: Excel intentionally replicates a legacy Lotus 1-2-3 bug that treats the year 1900 as a leap year (recognizing February 29, 1900 as day 60), even though 1900 was not a leap year in the Gregorian calendar. This does not impact calculations for dates after March 1, 1900.
Volatile Current-Date Functions: NOW() & TODAY()
Every rolling report — aging schedules, days-past-due columns, tenure calculators, countdown dashboards — needs an anchor to "right now." Excel supplies two zero-argument functions for this, and MO-211 expects you to know precisely how they differ.
=TODAY() // Current date only. Fractional (time) component is exactly 0.
=NOW() // Current date AND time, stored as a fractional serial.
| Function | Arguments | Returns | Example value on 4 July 2026 at 12:00 PM |
|---|---|---|---|
TODAY() | None (empty parentheses required) | Whole-number date serial | 46207 |
NOW() | None (empty parentheses required) | Date serial + time fraction | 46207.50 |
Volatility: What It Actually Means
Both functions are volatile. A volatile function recalculates on every worksheet recalculation event — opening the file, editing any cell, pressing F9, inserting a row, or sorting — not on a live ticking clock. NOW() therefore does not advance second by second while you watch it; it refreshes only when Excel next recalculates.
Two consequences the exam likes to probe:
- Phantom "unsaved changes": A workbook containing
TODAY()orNOW()recalculates on open, marking the file dirty. Excel then prompts you to save on close even though you typed nothing. - Performance drag: Thousands of volatile cells force full-chain recalculation in large models. Compute the anchor once in a single helper cell and reference that cell everywhere else.
Volatile Function vs. Static Timestamp
When a value must be frozen — a signed approval date, an audit stamp — a formula is the wrong tool:
| Requirement | Correct technique | Result |
|---|---|---|
| Date that rolls forward every day | =TODAY() | Recalculates; always current |
| Date that never changes | Ctrl+; | Hard-coded date literal |
| Time that never changes | Ctrl+Shift+; | Hard-coded time literal |
| Frozen date and time | Ctrl+; then space then Ctrl+Shift+; | Hard-coded timestamp |
Practical Patterns
=TODAY() - B2 // Days an invoice has been outstanding
=NOW() - TODAY() // Fractional time of day; format as [h]:mm
=EDATE(TODAY(), 3) // Same calendar day, three months out
=IF(TODAY() > C2, "Overdue", "Current")
[!WARNING]
NOW()andTODAY()return raw serials. In a cell formatted General,=NOW()displays46207.5rather than a timestamp. Apply a date or date-time number format before submitting an exam task.
Day-of-Week Classification: WEEKDAY()
WORKDAY moves a date across business days; WEEKDAY classifies a single date by its position within the week. It returns an integer, and the numbering scheme is controlled entirely by the optional second argument.
=WEEKDAY(serial_number, [return_type])
Return-Type Numbering Schemes
return_type | Numbering produced |
|---|---|
1 (or omitted) | 1 = Sunday, 2 = Monday, … 7 = Saturday |
2 | 1 = Monday, 2 = Tuesday, … 7 = Sunday |
3 | 0 = Monday, 1 = Tuesday, … 6 = Sunday |
11 | 1 = Monday … 7 = Sunday |
12 | 1 = Tuesday … 7 = Monday |
13 | 1 = Wednesday … 7 = Tuesday |
14 | 1 = Thursday … 7 = Wednesday |
15 | 1 = Friday … 7 = Thursday |
16 | 1 = Saturday … 7 = Friday |
17 | 1 = Sunday … 7 = Saturday |
Thursday, October 15, 2026 evaluated three ways:
=WEEKDAY(DATE(2026,10,15)) // 5 (type 1: Sun=1, so Thursday is 5)
=WEEKDAY(DATE(2026,10,15), 2) // 4 (type 2: Mon=1, so Thursday is 4)
=WEEKDAY(DATE(2026,10,15), 3) // 3 (type 3: Mon=0, so Thursday is 3)
The Weekend Test — and Its Classic Trap
The standard weekend flag relies on return_type 2, which pushes Saturday to 6 and Sunday to 7 so a single >5 comparison captures both:
=IF(WEEKDAY(A2, 2) > 5, "Weekend", "Weekday")
Writing =WEEKDAY(A2) > 5 with the default type 1 is a silent failure: Sunday scores 1, so only Saturday (7) exceeds 5 and every Sunday is misclassified as a business day. The same rule powers a conditional formatting rule that shades weekend rows across A2:F200 (rule formula =WEEKDAY($A2, 2) > 5, applied with column $A locked and the row relative), which is exactly how the two domains intersect on exam tasks.
WEEKDAY vs. WORKDAY: Choosing Correctly
| Question being asked | Function |
|---|---|
| "Is this date a weekend?" | WEEKDAY |
| "Which day of the week is this?" | WEEKDAY |
| "What date is 10 business days from here?" | WORKDAY |
| "How many business days separate these dates?" | NETWORKDAYS |
A scheduling template must flag every weekend date in column A. An analyst writes =IF(WEEKDAY(A2) > 5, "Weekend", "Weekday") and finds that Saturdays are flagged correctly but every Sunday is reported as a weekday. What is the defect and the correct fix?
An auditor needs cell D2 to record the exact moment an approval was granted so that the value never changes on later recalculations, and cell D3 to show the number of days a receivable has been outstanding, refreshing automatically each day. Which pair of entries satisfies both requirements?
A cell containing =NOW() displays 46207.5 instead of a timestamp, and the workbook prompts to save on close even though the analyst typed nothing. Which single explanation accounts for both symptoms?