@thi.ng/date
Version:
Datetime types, relative dates, math, iterators, composable formatters, locales
56 lines (55 loc) • 1.25 kB
JavaScript
import {
DAY,
HOUR,
MINUTE,
MONTH,
PERIODS,
SECOND,
WEEK,
YEAR
} from "./api.js";
const decomposeDuration = (dur) => {
const year = dur / YEAR | 0;
dur -= year * YEAR;
const month = dur / MONTH | 0;
dur -= month * MONTH;
const day = dur / DAY | 0;
dur -= day * DAY;
const hour = dur / HOUR | 0;
dur -= hour * HOUR;
const min = dur / MINUTE | 0;
dur -= min * MINUTE;
const sec = dur / SECOND | 0;
dur -= sec * SECOND;
return [year, month, day, hour, min, sec, dur];
};
const composeDuration = (parts) => {
let dur = (parts.y || 0) * YEAR;
dur += (parts.M || 0) * MONTH;
dur += (parts.d || 0) * DAY;
dur += (parts.h || 0) * HOUR;
dur += (parts.m || 0) * MINUTE;
dur += (parts.s || 0) * SECOND;
dur += parts.t || 0;
return dur;
};
const durationAs = (prec, dur) => dur / PERIODS[prec];
const asSeconds = (dur) => dur / SECOND;
const asMinutes = (dur) => dur / MINUTE;
const asHours = (dur) => dur / HOUR;
const asDays = (dur) => dur / DAY;
const asWeeks = (dur) => dur / WEEK;
const asMonths = (dur) => dur / MONTH;
const asYears = (dur) => dur / YEAR;
export {
asDays,
asHours,
asMinutes,
asMonths,
asSeconds,
asWeeks,
asYears,
composeDuration,
decomposeDuration,
durationAs
};