UNPKG

@kahi-ui/framework

Version:

Straight-forward Svelte UI for the Web

75 lines (74 loc) 2.72 kB
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); }