time-fast-forward

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

Usage no npm install needed!

<script type="module">
  import timeFastForward from 'https://cdn.skypack.dev/time-fast-forward';
</script>

README

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