UNPKG

@thi.ng/date

Version:

Datetime types, relative dates, math, iterators, composable formatters, locales

45 lines (44 loc) 1.26 kB
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 };