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));