@kahi-ui/framework
Version:
Straight-forward Svelte UI for the Web
75 lines (74 loc) • 2.72 kB
JavaScript
import { Temporal } from "../../vendor/js-temporal-polyfill";
import { DEFAULT_DAY, DEFAULT_LOCALE, DEFAULT_MONTH, DEFAULT_WEEKDAY, DEFAULT_YEAR } from "../locale";
import { from_datestamp, to_datestamp } from "./datestamps";
const DEFAULT_FORMAT_OPTIONS = {
day: DEFAULT_DAY,
month: DEFAULT_MONTH,
weekday: DEFAULT_WEEKDAY,
year: DEFAULT_YEAR,
};
export function add_days(datestamp, days) {
const date = from_datestamp(datestamp).add({ days });
return to_datestamp(date);
}
export function clamp_day(datestamp, minimum, maximum, inclusive = false) {
const date = from_datestamp(datestamp);
if (maximum) {
const maximum_date = from_datestamp(maximum);
if (Temporal.PlainDate.compare(maximum_date, date) < (inclusive ? 0 : 1)) {
return to_datestamp(maximum_date);
}
}
if (minimum) {
const minimum_date = from_datestamp(minimum);
if (Temporal.PlainDate.compare(minimum_date, date) > (inclusive ? 0 : -1)) {
return to_datestamp(minimum_date);
}
}
return to_datestamp(date);
}
export function format_day(datestamp, locale = DEFAULT_LOCALE, options = DEFAULT_FORMAT_OPTIONS) {
const date = from_datestamp(datestamp);
return date.toLocaleString(locale, options);
}
export function get_day(datestamp) {
return from_datestamp(datestamp).day;
}
export function includes_day(datestamp, targets) {
const source_date = from_datestamp(datestamp);
return !!targets.find((target, index) => {
const target_date = from_datestamp(target);
return source_date.equals(target_date);
});
}
export function is_day(datestamp, target) {
const source_date = from_datestamp(datestamp);
const target_date = from_datestamp(target);
return source_date.equals(target_date);
}
export function is_day_in_range(datestamp, minimum, maximum, inclusive = false) {
const date = from_datestamp(datestamp);
if (maximum) {
const maximum_date = from_datestamp(maximum);
if (Temporal.PlainDate.compare(maximum_date, date) < (inclusive ? 0 : 1))
return false;
}
if (minimum) {
const minimum_date = from_datestamp(minimum);
if (Temporal.PlainDate.compare(minimum_date, date) > (inclusive ? 0 : -1))
return false;
}
return true;
}
export function set_day(datestamp, day) {
const date = from_datestamp(datestamp).with({ day });
return to_datestamp(date);
}
export function now_day() {
const date = Temporal.Now.plainDateISO();
return to_datestamp(date);
}
export function subtract_days(datestamp, days) {
const date = from_datestamp(datestamp).subtract({ days });
return to_datestamp(date);
}