Skip to content

Fake the system time (Date) in your tests, without freezing it (unlike in many other libraries). Freeze only when you need.

License

Notifications You must be signed in to change notification settings

nikitaeverywhere/time-fast-forward

Repository files navigation

time-fast-forward

npm GitHub GitHub Workflow Status Codecov

Control the system time (Date, hrtime) in your tests, without freezing it (unlike in many other libraries).

Mock date and time both in NodeJS and web applications. Supports typescript.

Installation

npm install --save-dev time-fast-forward

Examples

import { jumpToTime, shiftTimeBy, resetTime } from 'time-fast-forward';

console.log(new Date());                      // -> Sat Sep 12 2020 01:18:21

// Add one hour to the current clock
shiftTimeBy(60 * 60 * 1000);
console.log(new Date());                      // -> Sat Sep 12 2020 02:18:21

// Shift -2 hours from now (-1 hour from the original time in this example)
shiftTimeBy(-2 * 60 * 60 * 1000);
console.log(new Date());                      // -> Sat Sep 12 2020 00:18:21

// Jump to a given date and time. Mind when providing anything relative here
jumpToTime("Fri, 11 Sep 2022 22:26:43 GMT");  // jumpToTime(2020, 1, 3), etc
console.log(new Date());                      // -> Fri Sep 11 2022 22:26:43

resetTime();                                  // Get back to the normal time
console.log(new Date());                      // -> Sat Sep 12 2020 01:18:21

This library can also potentially support time freezing, PRs for this are welcome:

console.log(new Date());                      // -> Sat Sep 12 2020 01:18:21
                                              //         note seconds here ^
setTimeout(() => {
  console.log(new Date());                    // -> Sat Sep 12 2020 01:18:22
                                              //     time is still ticking ^
  
  // Not implemented yet: PRs are welcome!
  freezeTime();

  setTimeout(() => {
    console.log(new Date());                  // -> Sat Sep 12 2020 01:18:22
                                              //        now time is frozen ^

    // Not implemented yet: PRs are welcome!
    unfreezeTime();
    console.log(new Date());                  // -> Sat Sep 12 2020 01:18:22
                                              // now at +1s from real time ^

    resetTime();
    console.log(new Date());                  // -> Sat Sep 12 2020 01:18:21
                                              // back to the normal time!  ^
  }, 1000);
}, 1000);

License

MIT © Nikita Savchenko

About

Fake the system time (Date) in your tests, without freezing it (unlike in many other libraries). Freeze only when you need.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published