Nanoseconds, BigInt, DST detection, and leap seconds

Import

import { ... } from 'ts-time-utils/precision';

Examples

High-Precision Utilities

Nanosecond timestamps and advanced date handling

import {
  createNanosecondTimestamp, nowNanoseconds,
  toBigIntMs, ValidDate, isInDSTGap, leapSecondsBetween
} from 'ts-time-utils/precision';

// Nanosecond-precision timestamps
const ts = createNanosecondTimestamp(Date.now(), 500000);
console.log('Milliseconds:', ts.milliseconds);
console.log('Nanoseconds:', ts.nanoseconds);
console.log('Total (BigInt):', ts.totalNanoseconds);

// Current time in nanoseconds
const now = nowNanoseconds();
console.log('Now (ns):', now.totalNanoseconds);

// BigInt timestamps for large date ranges
const bigMs = toBigIntMs(new Date());
console.log('BigInt ms:', bigMs);

// Validated dates (never invalid)
const valid = ValidDate.from(new Date('2025-09-14'));
console.log('Valid date:', valid.toDate());

// Returns null for invalid dates
const maybe = ValidDate.tryFrom(new Date('invalid'));
console.log('Invalid date:', maybe); // null

// DST gap detection
// 2am doesn't exist on DST spring-forward day
const dstGap = new Date('2024-03-10T02:30:00');
console.log('Is in DST gap?', isInDSTGap(dstGap, 'America/New_York'));

// Leap seconds between dates
const date1 = new Date('2015-01-01');
const date2 = new Date('2025-01-01');
const leapSecs = leapSecondsBetween(date1, date2);
console.log(`Leap seconds between dates: ${leapSecs}`);