What Date Was X Days Ago Calculator
Quickly find the exact date from any number of days in the past. This calculator answers questions like "What was the date 100 days ago?" or "When was 6 weeks ago?"—useful for tracking, compliance, and understanding timelines.
Common Lookback Periods
| Days Ago | Calendar Equivalent | Use Cases |
|---|---|---|
| 7 days | 1 week | Weekly tracking |
| 14 days | 2 weeks | Bi-weekly cycles |
| 30 days | ~1 month | Monthly lookbacks |
| 90 days | ~1 quarter | Quarterly reviews |
| 180 days | ~6 months | Semi-annual |
| 365 days | ~1 year | Annual comparison |
Days Ago Calculator
``javascript
function whatDateWasDaysAgo(daysAgo) {
const today = new Date();
const result = new Date(today);
result.setDate(result.getDate() - daysAgo);
// Calculate what day of week it was
const dayOfWeek = result.toLocaleDateString('en-US', { weekday: 'long' });
return {
today: today.toLocaleDateString('en-US', {
weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'
}),
daysAgo: daysAgo,
thatDate: result.toLocaleDateString('en-US', {
weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'
}),
weeksAgo: Math.floor(daysAgo / 7),
dayOfWeek: dayOfWeek
};
}
`
Tracking Historical Events
This calculation helps contextualize time: "The project started 127 days ago" becomes more meaningful when you know the actual date. It's also useful for verifying timelines, checking statute of limitations, and understanding how long ago events occurred.
Same Day of Week Pattern
Every 7 days, you return to the same day of the week. So 14 days ago was the same weekday as today. 100 days ago? Divide by 7: that's 14 weeks and 2 days, so two days earlier in the week.
The Traps in Date Arithmetic
Months are not 30 days. Adding one month to 31 January has no correct answer, and every
library picks differently — 28 February, 2 March or an error. Decide which your business
needs before the edge case decides for you.
Days are not always 86,400 seconds. Daylight saving makes one day 23 hours and another
25. Adding n * 86400000 milliseconds drifts by an hour twice a year, which is enough to
move a date across midnight and return an answer one day out.
`javascript
// Correct — the Date object normalises overflow and handles DST
const addDays = (date, days) => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
// Correct — calendar days, unaffected by DST or time of day
const daysBetween = (a, b) => {
const utc = (d) => Date.UTC(d.getFullYear(), d.getMonth(), d.getDate());
return Math.round((utc(b) - utc(a)) / 86400000);
};
`
Months are zero-indexed in JavaScript. new Date(2026, 0, 1) is January. new
Date(2026, 12, 1) is January 2027, silently.
Parsing is not portable. new Date("2026-08-30") is parsed as UTC, while
new Date("2026/08/30")` is parsed as local — the same calendar date, a day apart in some
zones. Always parse ISO 8601, and construct with explicit components when the time matters.
Time Zones Decide the Answer
| Question | Depends on |
|---|---|
| How many days until an event? | The viewer's zone |
| Is this subscription expired? | UTC, always |
| What day of the week was this? | The zone the event happened in |
| When does "tomorrow" start? | The viewer's zone |
Reference Points
| Interval | Days |
|---|---|
| Week | 7 |
| Month (average Gregorian) | 30.44 |
| Quarter | 91.31 |
| Year | 365.2425 |
| Leap year | 366 |