microsoft/playwright · error · Error
Invalid date: ${time}
Error message
Invalid date: ${time} What it means
Thrown by parseTime() (used by Clock.setSystemTime) when a Date object is passed whose getTime() returns NaN (an invalid Date). Number and string inputs are forwarded without validation; only Date objects are checked via `!isFinite(time.getTime())`.
Source
Thrown at packages/playwright-core/src/client/clock.ts:63
await this._browserContext._channel.clockRunFor({ ...parseTicks(ticks) }, kNoTimeout);
}
async setFixedTime(time: string | number | Date) {
await this._browserContext._channel.clockSetFixedTime({ ...parseTime(time) }, kNoTimeout);
}
async setSystemTime(time: string | number | Date) {
await this._browserContext._channel.clockSetSystemTime({ ...parseTime(time) }, kNoTimeout);
}
}
function parseTime(time: string | number | Date): { timeNumber?: number, timeString?: string } {
if (typeof time === 'number')
return { timeNumber: time };
if (typeof time === 'string')
return { timeString: time };
if (!isFinite(time.getTime()))
throw new Error(`Invalid date: ${time}`);
return { timeNumber: time.getTime() };
}
function parseTicks(ticks: string | number): { ticksNumber?: number, ticksString?: string } {
return {
ticksNumber: typeof ticks === 'number' ? ticks : undefined,
ticksString: typeof ticks === 'string' ? ticks : undefined
};
}
View on GitHub (pinned to c8fc3bf8d3)
Solutions
- Validate the Date before passing: `if (Number.isNaN(d.getTime())) throw ...`.
- Pass an epoch number or ISO string instead of a Date object.
- Sanitize input strings (e.g. Date.parse check) before constructing the Date.
Example fix
// before
await context.clock.setSystemTime(new Date(maybeBadString));
// after
const d = new Date(maybeBadString);
if (Number.isNaN(d.getTime())) throw new Error('bad date');
await context.clock.setSystemTime(d); Defensive patterns
Strategy: validation
Validate before calling
function validTimeArg(t: string | number | Date): boolean {
if (t instanceof Date) return !Number.isNaN(t.getTime());
return true; // numbers/strings are forwarded to the server
}
if (!validTimeArg(time))
throw new Error(`Invalid Date passed to clock.setSystemTime: ${time}`); Type guard
function isValidDate(d: Date): boolean {
return d instanceof Date && !Number.isNaN(d.getTime());
} Prevention
- Validate user-supplied date strings with Date.parse before constructing a Date.
- Prefer passing epoch numbers or ISO strings to setSystemTime to dodge Invalid Date objects.
When it happens
Trigger: Calling `await context.clock.setSystemTime(new Date('not-a-date'))`, or `setSystemTime(new Date(undefined))`. The Date parses to Invalid Date, getTime() is NaN, isFinite returns false.
Common situations: Parsing user/env-supplied time strings that can be invalid; constructing a Date from bad input and forwarding it without validation; passing a Date from a deserialized source that lost validity.
Related errors
- Invalid date: ${epoch}
- Clock only understands numbers, 'mm:ss' and 'hh:mm:ss'
- Invalid time ${str}
- Invalid input image
- Invalid output dimensions
AI-assisted analysis of microsoft/playwright@c8fc3bf8d3 (2026-08-12).
Data as JSON: /api/errors/1e1391accd245b92.
Report an issue: GitHub.