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 };
 | |
| }
 |