{"record":{"id":"1e1391accd245b92","repo":"microsoft/playwright","slug":"invalid-date-time","errorCode":null,"errorMessage":"Invalid date: ${time}","messagePattern":"Invalid date: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/playwright-core/src/client/clock.ts","lineNumber":63,"sourceCode":"    await this._browserContext._channel.clockRunFor({ ...parseTicks(ticks) }, kNoTimeout);\n  }\n\n  async setFixedTime(time: string | number | Date) {\n    await this._browserContext._channel.clockSetFixedTime({ ...parseTime(time) }, kNoTimeout);\n  }\n\n  async setSystemTime(time: string | number | Date) {\n    await this._browserContext._channel.clockSetSystemTime({ ...parseTime(time) }, kNoTimeout);\n  }\n}\n\nfunction parseTime(time: string | number | Date): { timeNumber?: number, timeString?: string } {\n  if (typeof time === 'number')\n    return { timeNumber: time };\n  if (typeof time === 'string')\n    return { timeString: time };\n  if (!isFinite(time.getTime()))\n    throw new Error(`Invalid date: ${time}`);\n  return { timeNumber: time.getTime() };\n}\n\nfunction parseTicks(ticks: string | number): { ticksNumber?: number, ticksString?: string } {\n  return {\n    ticksNumber: typeof ticks === 'number' ? ticks : undefined,\n    ticksString: typeof ticks === 'string' ? ticks : undefined\n  };\n}\n","sourceCodeStart":45,"sourceCodeEnd":73,"githubUrl":"https://github.com/microsoft/playwright/blob/c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6/packages/playwright-core/src/client/clock.ts#L45-L73","documentation":"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())`.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nawait context.clock.setSystemTime(new Date(maybeBadString));\n// after\nconst d = new Date(maybeBadString);\nif (Number.isNaN(d.getTime())) throw new Error('bad date');\nawait context.clock.setSystemTime(d);","handlingStrategy":"validation","validationCode":"function validTimeArg(t: string | number | Date): boolean {\n  if (t instanceof Date) return !Number.isNaN(t.getTime());\n  return true; // numbers/strings are forwarded to the server\n}\nif (!validTimeArg(time))\n  throw new Error(`Invalid Date passed to clock.setSystemTime: ${time}`);","typeGuard":"function isValidDate(d: Date): boolean {\n  return d instanceof Date && !Number.isNaN(d.getTime());\n}","tryCatchPattern":null,"preventionTips":["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."],"tags":["clock","validation","date"],"backgroundTag":null,"analyzedSha":"c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6","analyzedAt":"2026-08-12T07:26:36.950Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}