144 lines
5.9 KiB
JavaScript
144 lines
5.9 KiB
JavaScript
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 };
|
|
}
|