daet
Version:
Minimal immutable date class that supports relative time, calendar time, and plus/minus of different units.
115 lines (114 loc) • 4.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.relativeSecondWeek = exports.relativeThisWeek = exports.earlierLastWeek = exports.earlierThisWeek = exports.earlierOrLater = exports.earlierOrLaterToday = exports.underMinute = exports.fewSeconds = exports.weekdayNextWeek = exports.weekdayThisWeek = exports.relativeDelta = exports.relativeHoursAndMinutes = exports.yesterdayOrTommorow = exports.hoursAndMinutes = exports.hours = exports.relativeMinutes = exports.minutes = exports.relativeSeconds = exports.seconds = exports.relativeTicks = exports.rightNow = void 0;
const index_js_1 = require("./index.js");
function rightNow() {
return 'right now';
}
exports.rightNow = rightNow;
function relativeTicks({ past, ticks, }) {
return past ? `${ticks} ago` : `in ${ticks}`;
}
exports.relativeTicks = relativeTicks;
function seconds({ seconds }) {
return `${seconds} ${seconds > 1 ? 'seconds' : 'second'}`;
}
exports.seconds = seconds;
function relativeSeconds(opts) {
const ticks = seconds({ seconds: opts.seconds });
return relativeTicks({ past: opts.past, ticks });
}
exports.relativeSeconds = relativeSeconds;
function minutes({ minutes }) {
return `${minutes} ${minutes > 1 ? 'minutes' : 'minute'}`;
}
exports.minutes = minutes;
function relativeMinutes(opts) {
const ticks = minutes({ minutes: opts.minutes });
return relativeTicks({ past: opts.past, ticks });
}
exports.relativeMinutes = relativeMinutes;
function hours({ hours }) {
return `${hours} ${hours > 1 ? 'hours' : 'hour'}`;
}
exports.hours = hours;
function hoursAndMinutes(opts) {
return hours(opts) + (opts.minutes ? ' ' + minutes(opts) : '');
}
exports.hoursAndMinutes = hoursAndMinutes;
function yesterdayOrTommorow({ past }) {
return past ? 'yesterday' : 'tomorrow';
}
exports.yesterdayOrTommorow = yesterdayOrTommorow;
function relativeHoursAndMinutes(opts) {
const ticks = hoursAndMinutes({ hours: opts.hours, minutes: opts.minutes });
return relativeTicks({ past: opts.past, ticks });
}
exports.relativeHoursAndMinutes = relativeHoursAndMinutes;
function relativeDelta(opts) {
if (opts.delta < index_js_1.Minute) {
const seconds = Math.floor(opts.delta / index_js_1.Second);
if (seconds)
return relativeSeconds({ past: opts.past, seconds });
}
const hours = Math.floor(opts.delta / index_js_1.Hour);
const minutes = Math.floor((opts.delta - hours * index_js_1.Hour) / index_js_1.Minute);
if (hours)
return relativeHoursAndMinutes({ past: opts.past, hours, minutes });
if (minutes)
return relativeMinutes({ past: opts.past, minutes });
return rightNow();
}
exports.relativeDelta = relativeDelta;
function weekdayThisWeek({ weekday }) {
return `this ${weekday}`;
}
exports.weekdayThisWeek = weekdayThisWeek;
function weekdayNextWeek({ weekday }) {
return `next ${weekday}`;
}
exports.weekdayNextWeek = weekdayNextWeek;
function fewSeconds({ past }) {
return past ? 'a few seconds ago' : 'in a few seconds';
}
exports.fewSeconds = fewSeconds;
function underMinute({ past }) {
return past ? 'under a minute ago' : 'in under a minute';
}
exports.underMinute = underMinute;
function earlierOrLaterToday({ past }) {
return past ? 'earlier today' : 'later today';
}
exports.earlierOrLaterToday = earlierOrLaterToday;
function earlierOrLater({ past }) {
return past ? 'sometime earlier' : 'sometime later';
}
exports.earlierOrLater = earlierOrLater;
function earlierThisWeek() {
return 'earlier this week';
}
exports.earlierThisWeek = earlierThisWeek;
function earlierLastWeek() {
return 'earlier last week';
}
exports.earlierLastWeek = earlierLastWeek;
function relativeThisWeek({ past, when, }) {
return past
? earlierThisWeek()
: weekdayThisWeek({
weekday: when.format('en', {
weekday: 'long',
}),
});
}
exports.relativeThisWeek = relativeThisWeek;
function relativeSecondWeek({ past, when, }) {
return past
? earlierLastWeek()
: weekdayNextWeek({
weekday: when.format('en', {
weekday: 'long',
}),
});
}
exports.relativeSecondWeek = relativeSecondWeek;