1.3.1 • Published 2 years ago

@execonline-inc/time-distance v1.3.1

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

time-distance

The time-distance package provides interfaces and functions for dealing with distances between dates.

import * as time from '@execonline-inc/time-distance';

Types

Future

interface Future {
  kind: 'future';
  gap: Time;
}

Now

interface Now {
  kind: 'now';
}

TimeDistance

interface Past {
  kind: 'past';
  gap: Time;
}

Past

type TimeVector = Future | Now | Past;

EffectivelyNow

interface EffectivelyNow {
  kind: 'effectively-now';
  time: Time;
}

Functions

distanceFrom

This function computes the gap between two Times. If the first Time is larger then the second, than the result is considered to be in the future. A smaller first number is considered to be in the past. And equal times are considered now.

import { distanceFrom } from '@execonline-inc/time-distance';
import { Time, seconds } from '@execonline-inc/time';

const time1: Time = seconds(10);
const time2: Time = seconds(20);
distanceFrom(time1, time2); // --> Past { ... }

distanceFromDate

This function computes the Time distance between two dates. Be aware that Date objects in Javascript can be invalid.

import { distanceFromDate } from '@execonline-inc/time-distance';

const future = distanceFromDate(new Date(1), new Date());
const badDates = distanceFromDate(new Date('foo'), new Date());

toLargestMeaningfulUnit

This function converts a TimeDistance so that the gap is expressed in terms of the largest meaningful time unit. Using this function may cause a loss of precision on the time gap.

const distance: TimeVector = distanceBetween(minutes(15), minutes(25));
toLargestMeaningfulUnit(distance);

largestMeaningfulUnit

This function takes a Time and returns a new Time that represents that largest meaningful unit of time. For example, seconds(60) would be converted to minutes(1), since that is the largest unit of time that isn't effectively zero.

Note that "meaningful" here means meaningful to human beings. Anything less than a second is treated as EffectivelyNow

const result: Ok<Time> = largestMeaningfulUnit(seconds(60));
const nowish: Err<EffectivelyNow> = largestMeaningfulUnit(milliseconds(100));