# Mocking Dates Sometimes you need to be in control of the date to ensure consistency when testing. Vitest uses [`@sinonjs/fake-timers`](https://github.com/sinonjs/fake-timers) package for manipulating timers, as well as system date. You can find more about the specific API in detail [here](/api/vi#vi-setsystemtime). ## Example ```js import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' const businessHours = [9, 17] function purchase() { const currentHour = new Date().getHours() const [open, close] = businessHours if (currentHour > open && currentHour < close) { return { message: 'Success' } } return { message: 'Error' } } describe('purchasing flow', () => { beforeEach(() => { // tell vitest we use mocked time vi.useFakeTimers() }) afterEach(() => { // restoring date after each test run vi.useRealTimers() }) it('allows purchases within business hours', () => { // set hour within business hours const date = new Date(2000, 1, 1, 13) vi.setSystemTime(date) // access Date.now() will result in the date set above expect(purchase()).toEqual({ message: 'Success' }) }) it('disallows purchases outside of business hours', () => { // set hour outside business hours const date = new Date(2000, 1, 1, 19) vi.setSystemTime(date) // access Date.now() will result in the date set above expect(purchase()).toEqual({ message: 'Error' }) }) }) ```