JavaScript library for working with time durations in "1mo 1w 1d" format.
$ npm install --save chronometric
You can find CodeSandbox template here
import { Chronometric } from 'chronometric';
const chronoA = new Chronometric(2200);
const chronoB = Chronometric.fromString('1w 1d');
const chronoC = new Chronometric({ d: 1, h: 1 });
Via Node.js require()
const { Chronometric } = require('chronometric');
const chronoA = new Chronometric(2200);
const chronoB = Chronometric.fromString('1w 1d');
const chronoC = new Chronometric({ d: 1, h: 1 });
Via UNPKG
<script src="https://unpkg.com/chronometric@latest"></script>
<script>
const { Chronometric } = window.chronometric;
const chronoA = new Chronometric(2200);
const chronoB = Chronometric.fromString('1w 1d');
const chronoC = new Chronometric({ d: 1, h: 1 });
</script>
import { Chronometric } from 'chronometric';
// global configuration
Chronometric.defaultConversionRatios = {
ms: 1,
d: 24 * 60 * 60 * 1000
};
console.log(Chronometric.fromString("1d") + 0); // will output 86400000
// instance configuration
const chronoB = new Chrono(
2200,
{
ms: 1,
s: 1000
}
);
console.log(chronoB.toString()); // will output "2s 200ms"
Works with JavaScript Date objects
import { Chronometric } from 'chronometric';
const dateFrom = new Date();
const dateTo = new Date(0);
const chrono = new Chronometric(dateFrom - dateTo); // will contain timespan between dateFrom and dateTo
import { Chronometric } from 'chronometric';
const now = Date.now();
const tomorrow = new Date(now + Chronometric.fromString("1d"));
const inAWeek = new Date(now + Chronometric.fromString("1w"));
import {
Chronometric,
HOUR_TO_MS_CONVERSION_RATIO,
MINUTE_TO_MS_CONVERSION_RATIO
} from 'chronometric';
Chronometric.defaultConversionRatios = {
ms: 1,
m: MINUTE_TO_MS_CONVERSION_RATIO,
h: HOUR_TO_MS_CONVERSION_RATIO,
d: 8 * HOUR_TO_MS_CONVERSION_RATIO, // 8 hour work day
w: 5 * 8 * HOUR_TO_MS_CONVERSION_RATIO // 5 day work week
};
const spentTime = ["9h 30m", "12h 22m"];
const totalSpentTime = new Chronometric(
spentTime
.reduce((acc, item) => acc + Chronometric.fromString(item), 0)
).toString(); // "2d 5h 52m"
- When using big and small conversion ratios simultaniously (i.e. 1 year and 1 nanosecond to milliseconds) small ones can be lost due to JavaScript number type precision (see Number.MAX_SAFE_INTEGER)