TypeScript icon, indicating that this package has built-in type declarations

0.1.2 • Public • Published

Moondial Timer

A tiny stopwatch, chronometer, and countdown timer library with millisecond precision built in TypeScript. Support for state change events implemented via RxJs. Use it in the browser or NodeJs.

See the docs for live examples of the library in action:

Project Setup

Build the project:

> npm run build
# OR
> npm run watch

Run a demo of the project with:

> npm run demo

This demo is equivalent to the live demo in the docs.


Import the Library

ES Modules:

import { Clock, Duration } from "moondial.js";

Require statement:

var { Clock, Duration } = require("moondial.js");

Quickstart Example

Setup a new clock with some basic configuration.

let c = new Clock({ 
    mode: 'countdown',
    initial: Duration.of(20, 'seconds')

This creates a new countdown clock with an inital time of 20 seconds. If we set no configuration the mode would default to 'stopwatch' and initial time would default to 0 seconds.

We can start the clock...


pause the clock...


and stop the clock. Stopping the clock will cause it to revert to initial on next start.


We can also reconfigure the clock later.

    mode: 'countdown',
    initial: Duration.of(10, 'minutes'),
    interval: Duration.of(100, 'milliseconds')

The update interval would otherwise default to 500ms.

When the clock is running (or any other phase, really) we can fetch the state.

const cState = c.state;
// Which returns:
    phase: 'running',
    time: {} //some Duration object

We can access the time in a particular unit.'milliseconds'); // e.g. 9845

OR convert the time to a nice clock style string

import { Clockify } from "moondial.js";

Clockify.duration(cState.time, ['hours', 'minutes', 'seconds']);
// Which returns:
// 00:09:57

The units are not mandatory and would default to ['minutes', 'seconds']. We can also clockify other things.

// all Duration params are optional
Clockify.durationParams({ days: 1, hours: 3, minutes: 30, seconds: 10, milliseconds: 0 });
Clockify.seconds(280, [['minutes', 'seconds'], ';']); // optional separator character results in - 04;40
Clockify.milliseconds(10000); // 00:10

OR we could subscribe to clock updated events and do any of these things in the callback.'updated', (state:ClockState) => {

The library also contains typescript definitions with doc comments for editors which support hinting.

See the docs for more examples and API details:

Package Sidebar


npm i moondial

Weekly Downloads






Unpacked Size

183 kB

Total Files


Last publish


  • iso.8601