A timestamp-based timer that enables recording elapsed time and formatting the result.
npm install timer-node

A lightweight JavaScript library for measuring elapsed time in Node.js or the browser without using setInterval or setTimeout. It also has type definitions for TypeScript.
``bash`
npm install timer-node
`javascript
// JS
const { Timer } = require('timer-node');
// TS
import { Timer, TimerOptions, Time } from 'timer-node';
`
A timestamp-based timer that can be started, paused, resumed, and stopped. It calculates durations based on system time.
#### Constructor
`ts`
new Timer(options?: TimerOptions)
- options: An optional configuration object with:label?: string
- – A label for this timer.startTimestamp?: number
- – Start time (if you want to initialize from the past).endTimestamp?: number
- – End time (if already stopped).currentStartTimestamp?: number
- – Most recent resume time.pauseCount?: number
- – Number of times paused.accumulatedMs?: number
- – Accumulated milliseconds from previous runs.
#### Common Methods
- start(): Starts (or restarts) the timer.
- pause(): Pauses the timer (if running).
- resume(): Resumes the timer (if paused).
- stop(): Stops the timer.
- clear(): Clears all timer data, resetting it to an unstarted state.
- isStarted() / isPaused() / isRunning() / isStopped(): Check the timer state.
- ms(): Returns the elapsed time in milliseconds.
- time(): Returns an object of time fractions (d, h, m, s, ms).ms()
- pauseMs() / pauseTime(): Similar to / time(), but for paused duration.%label
- pauseCount(): Returns how many times the timer has been paused.
- format(template?: string): Formats the elapsed time using placeholders (, %d, %h, %m, %s, %ms).
- serialize(): Returns a JSON string representing the timer state.
#### Static Methods
- Timer.deserialize(serializedTimer: string): Timer\
Re-creates a timer from a serialized string generated by .serialize().
- Timer.benchmark(fn: () => any): Timer\
Measures the synchronous execution time of fn. Returns a stopped Timer.
---
Any method returning an object breakdown of time uses the following shape:
`ts`
interface Time {
d: number; // days
h: number; // hours
m: number; // minutes
s: number; // seconds
ms: number; // milliseconds
}
`js
const { Timer } = require('timer-node');
const timer = new Timer({ label: 'demo' });
timer.start();
// ... some operations ...
timer.pause();
console.log('Paused at', timer.ms(), 'ms');
timer.resume();
// ... more operations ...
timer.stop();
console.log('Total elapsed:', timer.time());
// e.g. { d: 0, h: 0, m: 1, s: 12, ms: 345 }
``
This library is licensed under the MIT License. See LICENSE for details.