tai64
Version:
TypeScript implementation of TAI64 timestamps for Node.js and the browser
88 lines (87 loc) • 3.1 kB
JavaScript
"use strict";
/**
* Copyright (c) 2018 hl2, https://hl2.com
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
Object.defineProperty(exports, "__esModule", { value: true });
/**
* See https://www.ietf.org/timezones/data/leap-seconds.list.
*
* The NTP timestamps are in units of seconds since the NTP epoch, which is 1 January 1900, 00:00:00. The UNIX timestamp
* corresponding to the NTP timestamp X can be computed with the following formula:
*
* X - 2208988800
*
* The number 2208988800 represents the NTP timestamp for the UNIX epoch, which is 1 January 1970, 00:00:00, computed with
* the following formula (70 * 365 + 17) * 86400.
*/
const leapSeconds = [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
];
/**
* Add leap seconds to the given UNIX timestamp.
*
* @param timestamp - The UNIX timestamp in seconds
* @returns a timestamp with leap seconds added
*/
const addLeapSeconds = (timestamp) => {
const leapSecond = leapSeconds.find(([ts]) => timestamp >= ts);
return timestamp + (leapSecond ? leapSecond[1] : 0);
};
exports.addLeapSeconds = addLeapSeconds;
/**
* Remove leap seconds from the given timestamp including the leap seconds.
*
* @param timestamp - The timestamp in seconds including leap seconds
* @returns the corresponding UNIX timestamp
*/
const removeLeapSeconds = (timestamp) => {
const leapSecond = leapSeconds.find(([ts, offset]) => timestamp - offset >= ts);
return timestamp - (leapSecond ? leapSecond[1] : 0);
};
exports.removeLeapSeconds = removeLeapSeconds;