@thi.ng/date
Version:
Datetime types, relative dates, math, iterators, composable formatters, locales
45 lines (44 loc) • 1.26 kB
JavaScript
import { isString } from "@thi.ng/checks/is-string";
import { DateTime } from "./datetime.js";
import { floorQuarter, floorWeek } from "./round.js";
const defIterator = (prec, tick) => {
return function* (...args) {
let [from, to] = (args.length > 1 ? args : args[0]).map(
(x) => new DateTime(x).getTime()
);
let state = isString(prec) ? new DateTime(from, prec) : prec(from);
let epoch = from;
while (epoch < to) {
epoch = state.getTime();
if (epoch >= from && epoch < to) yield epoch;
tick(state);
}
};
};
const years = defIterator("y", (d) => d.incYear());
const quarters = defIterator(
(from) => new DateTime(floorQuarter(from)),
(d) => d.incQuarter()
);
const months = defIterator("M", (d) => d.incMonth());
const weeks = defIterator(
(from) => new DateTime(floorWeek(from)),
(d) => d.incWeek()
);
const days = defIterator("d", (d) => d.incDay());
const hours = defIterator("h", (d) => d.incHour());
const minutes = defIterator("m", (d) => d.incMinute());
const seconds = defIterator("s", (d) => d.incSecond());
const milliseconds = defIterator("t", (d) => d.incMillisecond());
export {
days,
defIterator,
hours,
milliseconds,
minutes,
months,
quarters,
seconds,
weeks,
years
};