tai64
Version:
TypeScript implementation of TAI64 timestamps for Node.js and the browser
61 lines (37 loc) • 2.66 kB
Markdown
# TAI64 · [](https://github.com/kevinpollet/typescript-node-module-starter/blob/master/LICENSE.md) [](https://travis-ci.com/hl2/tai64) [](https://coveralls.io/github/hl2/tai64?branch=master)
⏱️ TypeScript implementation of TAI64 timestamps for [Node.js](https://nodejs.org/en/) and the browser.
> TAI refers to International Atomic Time (Temps Atomique International in French), the current international real-time standard. One TAI second is defined as the duration of `9192631770` periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of the cesium atom.
https://cr.yp.to/libtai/tai64.html#tai64
## Getting started
### Installation
```shell
npm install --save tai64
```
### Usage
```javascript
import { TAI64 } from "tai64";
const now = TAI64.now();
const moonLanding = TAI64.fromUnix(
Math.floor(Date.parse("July 20, 69 00:20:18 UTC") / 1000)
);
console.log("Current date: %s", now.toHexString());
console.log("🚀🌝 Moon Landing: %s", moonLanding.toHexString());
```
## Implementation details
### Immutability
A TAI64 instance is immutable by design and can’t be modified after it’s created.
### Long dependency
In ECMAScript, a `Number` is represented as a [double-precision floating-point format number](http://en.wikipedia.org/wiki/Double_precision_floating-point_format) and the largest integer value that can be safely
represented is `2^53-1`. A TAI64 is an integer between `0` and `2^64` referring to a particular second of real time. For that reason, this project uses [long.js](https://github.com/dcodeIO/long.js) as a dependency. In future versions, we will investigate if we have to get rid of this dependency and if the [BigInt](https://github.com/tc39/proposal-bigint) proposal can be used.
## Further reading
- [UTC, TAI, and UNIX time](https://cr.yp.to/proto/utctai.html)
- [What’s this whole TAI64 thing about?](http://dyscour.se/post/12679668746/using-tai64-for-logging)
- [International Atomic Time](https://en.wikipedia.org/wiki/International_Atomic_Time)
- [Leap second](https://en.wikipedia.org/wiki/Leap_second)
## Contributing
Contributions are welcome 👍
Use the links below to request a feature, file a bug or contribute some code!
- Issues: https://github.com/hl2/tai64/issues
- Pull requests: https://github.com/hl2/tai64/pulls
## License
TAI64 is [MIT Licensed](./LICENSE.md).