export class MockDate { RealDate: { new(value?: number | string | Date): Date } = Date; date: { day?: number; month?: number; year?: number; } = {}; constructor() { // @ts-ignore Date = jest.fn() // @ts-ignore .mockImplementation((value?) => { const newDate = value ? new this.RealDate(value) : new this.RealDate(); if (this.date.day) { newDate.setDate(this.date.day); newDate.setMonth(this.date.month); newDate.setFullYear(this.date.year); } return newDate as unknown as Date; }); Date.now = jest.fn().mockImplementation(() => { return new global.Date().getTime(); }); } setDate(date: string | number | Date) { const newDate = new this.RealDate(date); this.date = { day: newDate.getDate(), month: newDate.getMonth(), year: newDate.getFullYear() }; } destroy() { // @ts-ignore if (Date.mockRestore) { // @ts-ignore Date.mockRestore(); } // @ts-ignore if (Date.now.mockRestore) { // @ts-ignore Date.now.mockRestore(); } this.date = {}; this.RealDate = null; } }