UNPKG

flatpickr

Version:

A lightweight, powerful javascript datetime picker

144 lines (143 loc) 6.02 kB
import { tokenRegex, revFormat, formats, } from "./formatting"; import { defaults } from "../types/options"; import { english } from "../l10n/default"; export var createDateFormatter = function (_a) { var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d; return function (dateObj, frmt, overrideLocale) { var locale = overrideLocale || l10n; if (config.formatDate !== undefined && !isMobile) { return config.formatDate(dateObj, frmt, locale); } return frmt .split("") .map(function (c, i, arr) { return formats[c] && arr[i - 1] !== "\\" ? formats[c](dateObj, locale, config) : c !== "\\" ? c : ""; }) .join(""); }; }; export var createDateParser = function (_a) { var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c; return function (date, givenFormat, timeless, customLocale) { if (date !== 0 && !date) return undefined; var locale = customLocale || l10n; var parsedDate; var dateOrig = date; if (date instanceof Date) parsedDate = new Date(date.getTime()); else if (typeof date !== "string" && date.toFixed !== undefined) parsedDate = new Date(date); else if (typeof date === "string") { var format = givenFormat || (config || defaults).dateFormat; var datestr = String(date).trim(); if (datestr === "today") { parsedDate = new Date(); timeless = true; } else if (config && config.parseDate) { parsedDate = config.parseDate(date, format); } else if (/Z$/.test(datestr) || /GMT$/.test(datestr)) { parsedDate = new Date(date); } else { var matched = void 0, ops = []; for (var i = 0, matchIndex = 0, regexStr = ""; i < format.length; i++) { var token = format[i]; var isBackSlash = token === "\\"; var escaped = format[i - 1] === "\\" || isBackSlash; if (tokenRegex[token] && !escaped) { regexStr += tokenRegex[token]; var match = new RegExp(regexStr).exec(date); if (match && (matched = true)) { ops[token !== "Y" ? "push" : "unshift"]({ fn: revFormat[token], val: match[++matchIndex], }); } } else if (!isBackSlash) regexStr += "."; } parsedDate = !config || !config.noCalendar ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0) : new Date(new Date().setHours(0, 0, 0, 0)); ops.forEach(function (_a) { var fn = _a.fn, val = _a.val; return (parsedDate = fn(parsedDate, val, locale) || parsedDate); }); parsedDate = matched ? parsedDate : undefined; } } if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) { config.errorHandler(new Error("Invalid date provided: " + dateOrig)); return undefined; } if (timeless === true) parsedDate.setHours(0, 0, 0, 0); return parsedDate; }; }; export function compareDates(date1, date2, timeless) { if (timeless === void 0) { timeless = true; } if (timeless !== false) { return (new Date(date1.getTime()).setHours(0, 0, 0, 0) - new Date(date2.getTime()).setHours(0, 0, 0, 0)); } return date1.getTime() - date2.getTime(); } export function compareTimes(date1, date2) { return (3600 * (date1.getHours() - date2.getHours()) + 60 * (date1.getMinutes() - date2.getMinutes()) + date1.getSeconds() - date2.getSeconds()); } export var isBetween = function (ts, ts1, ts2) { return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2); }; export var calculateSecondsSinceMidnight = function (hours, minutes, seconds) { return hours * 3600 + minutes * 60 + seconds; }; export var parseSeconds = function (secondsSinceMidnight) { var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60; return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60]; }; export var duration = { DAY: 86400000, }; export function getDefaultHours(config) { var hours = config.defaultHour; var minutes = config.defaultMinute; var seconds = config.defaultSeconds; if (config.minDate !== undefined) { var minHour = config.minDate.getHours(); var minMinutes = config.minDate.getMinutes(); var minSeconds = config.minDate.getSeconds(); if (hours < minHour) { hours = minHour; } if (hours === minHour && minutes < minMinutes) { minutes = minMinutes; } if (hours === minHour && minutes === minMinutes && seconds < minSeconds) seconds = config.minDate.getSeconds(); } if (config.maxDate !== undefined) { var maxHr = config.maxDate.getHours(); var maxMinutes = config.maxDate.getMinutes(); hours = Math.min(hours, maxHr); if (hours === maxHr) minutes = Math.min(maxMinutes, minutes); if (hours === maxHr && minutes === maxMinutes) seconds = config.maxDate.getSeconds(); } return { hours: hours, minutes: minutes, seconds: seconds }; }