@thi.ng/date
Version:
Datetime types, relative dates, math, iterators, composable formatters, locales
89 lines (88 loc) • 2.41 kB
JavaScript
import { DAY, HOUR, MINUTE, SECOND, WEEK } from "./api.js";
import { ensureDate } from "./checks.js";
const floorSecond = (epoch) => {
const d = ensureDate(epoch);
return Date.UTC(
d.getUTCFullYear(),
d.getUTCMonth(),
d.getUTCDate(),
d.getUTCHours(),
d.getUTCMinutes(),
d.getUTCSeconds()
);
};
const floorMinute = (epoch) => {
const d = ensureDate(epoch);
return Date.UTC(
d.getUTCFullYear(),
d.getUTCMonth(),
d.getUTCDate(),
d.getUTCHours(),
d.getUTCMinutes()
);
};
const floorHour = (epoch) => {
const d = ensureDate(epoch);
return Date.UTC(
d.getUTCFullYear(),
d.getUTCMonth(),
d.getUTCDate(),
d.getUTCHours()
);
};
const floorDay = (epoch) => {
const d = ensureDate(epoch);
return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate());
};
const floorWeek = (epoch) => {
const d = ensureDate(epoch);
const w = d.getUTCDay();
return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()) - ((w || 7) - 1) * DAY;
};
const floorMonth = (epoch) => {
const d = ensureDate(epoch);
return Date.UTC(d.getUTCFullYear(), d.getUTCMonth());
};
const floorQuarter = (epoch) => {
const d = ensureDate(epoch);
return Date.UTC(d.getUTCFullYear(), (d.getUTCMonth() / 3 | 0) * 3);
};
const floorYear = (epoch) => Date.UTC(ensureDate(epoch).getUTCFullYear(), 0);
const ceilSecond = (epoch) => floorSecond(ensureDate(epoch).getTime() + SECOND);
const ceilMinute = (epoch) => floorMinute(ensureDate(epoch).getTime() + MINUTE);
const ceilHour = (epoch) => floorHour(ensureDate(epoch).getTime() + HOUR);
const ceilDay = (epoch) => floorDay(ensureDate(epoch).getTime() + DAY);
const ceilWeek = (epoch) => floorWeek(ensureDate(epoch).getTime() + WEEK);
const ceilMonth = (epoch) => {
const d = ensureDate(epoch);
let y = d.getUTCFullYear();
let m = d.getUTCMonth() + 1;
m > 11 && y++;
return Date.UTC(y, m % 12);
};
const ceilQuarter = (epoch) => {
const d = ensureDate(epoch);
let y = d.getUTCFullYear();
let m = ((d.getUTCMonth() + 3) / 3 | 0) * 3;
m > 11 && y++;
return Date.UTC(y, m % 12);
};
const ceilYear = (epoch) => Date.UTC(ensureDate(epoch).getUTCFullYear() + 1, 0);
export {
ceilDay,
ceilHour,
ceilMinute,
ceilMonth,
ceilQuarter,
ceilSecond,
ceilWeek,
ceilYear,
floorDay,
floorHour,
floorMinute,
floorMonth,
floorQuarter,
floorSecond,
floorWeek,
floorYear
};