@technobuddha/library
Version:
A large library of useful functions
242 lines • 18.9 kB
JavaScript
import { secondsPerHour, secondsPerMinute } from "./date.js";
import { dayOfWeek } from "./day-of-week.js";
import { dayOfYear } from "./day-of-year.js";
import { isoWeekOfYear } from "./iso-week-of-year.js";
import { julian } from "./julian.js";
import { ordinal } from "./ordinal.js";
import { pad } from "./pad.js";
import { timezone } from "./timezone.js";
import { empty } from "./unicode.js";
const tokenizer = /[hHmDfO]{1,2}|[s]{1,3}|YYYY|YY|[Md]{1,4}|W(y|w{1,2}|d)|TZ|GMT|TH|T{1,2}|AM|PM|CE|BCE|AD|BC|E{2,3}|J|Q|"[^"]*"|'[^']*'/gu;
const masks = Object.freeze({
default: 'YYYY-MM-DD hh:mm:ss.ff',
rfc1123: 'ddd, DD MMM YYYY hh:mm:ss GMT',
asctime: 'ddd MMM DD hh:mm:ss',
shortDate: 'M/D/YY',
mediumDate: 'MMM D, YYYY',
longDate: 'MMMM D, YYYY',
fullDate: 'dddd, MMMM D, YYYY',
shortTime: 'H:mm TT',
shortDateTime: 'M/D/YYYY H:mm TT',
mediumTime: 'H:mm:ss TT',
mediumDateTime: 'MMM D, YYYY H:mm:ss TT',
longTime: 'H:mm:ss TT GMT',
longDateTime: 'MMMM D, YYYY H:mm:ss TT GMT',
isoDate: 'YYYY-MM-DD',
isoDateTime: 'YYYY-MM-DD"T"hh:mm:ss',
isoDateFull: 'YYYY-MM-DD"T"hh:mm:ss.ff',
isoDateTimeZone: 'YYYY-MM-DD"T"hh:mm:ssTZ',
isoDateFullZone: 'YYYY-MM-DD"T"hh:mm:ss.ffTZ',
isoTime: 'hh:mm:ss',
isoTimeFull: 'hh:mm:ss.ff',
isoTimeZone: 'hh:mm:ssTZ',
isoFullZone: 'hh:mm:ss.ffTZ',
isoWeek: 'Wy"W"Www-Wd',
isoWeekTime: 'Wy"W"Www-Wd"T"hh:mm:ss',
isoWeekFull: 'Wy"W"Www-Wd"T"hh:mm:ss.ff',
isoWeekTimeZone: 'Wy"W"Www-Wd"T"hh:mm:ssTZ',
isoWeekFullZone: 'Wy"W"Www-Wd"T"hh:mm:ss.ffTZ',
isoOrdinal: 'YYYY-OO',
// cspell:ignore hhmmssff
timestamp: 'YYYYMMDDhhmmssff',
cookie: 'dddd, DD MMM YYYY hh:mm:ss GMT',
});
const dayOne = ['U', 'M', 'T', 'W', 'R', 'F', 'S'];
const dayTwo = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
const dayAbbrev = ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'];
const dayName = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
const monthAbbrev = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
];
const monthName = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
];
/**
* Format a date
* @param input - The date
* @param mask - The mask
* @param options - see {@link FormatDateOptions}
* @defaultValue utc false
* @group Time
* @category Formatting
*/
export function formatDate(input, mask, { utc = false } = {}) {
const argMask = mask ?
mask in masks ?
masks[mask]
: mask
: masks.default;
const da = utc ? input.getUTCDate() : input.getDate();
const dy = utc ? input.getUTCDay() : input.getDay();
const mo = utc ? input.getUTCMonth() : input.getMonth();
const yr = utc ? input.getUTCFullYear() : input.getFullYear();
const ho = utc ? input.getUTCHours() : input.getHours();
const mi = utc ? input.getUTCMinutes() : input.getMinutes();
const se = utc ? input.getUTCSeconds() : input.getSeconds();
const ms = utc ? input.getUTCMilliseconds() : input.getMilliseconds();
const o = utc ? 0 : input.getTimezoneOffset();
return argMask.replaceAll(tokenizer, (token) => {
switch (token) {
case 'h': {
return pad(ho, 0);
} //Hours (24)
case 'hh': {
return pad(ho, 2);
} //Hours (24)
case 'H': {
return pad(ho % 12 || 12, 0);
} //Hours (12)
case 'HH': {
return pad(ho % 12 || 12, 2);
} //Hours (12)
case 'm': {
return pad(mi, 0);
} //Minutes
case 'mm': {
return pad(mi, 2);
} //Minutes
case 's': {
return pad(se, 0);
} //Seconds
case 'ss': {
return pad(se, 2);
} //Seconds
case 'sss': {
return pad(ho * secondsPerHour + mi * secondsPerMinute + se, 0);
} //Seconds
case 'f': {
return pad(ms, 0);
} //Milliseconds
case 'ff': {
return pad(ms, 3);
} //Milliseconds
case 'YYYY': {
return pad(yr < 1 ? -yr + 1 : yr, 4);
} //Year
case 'YY': {
return pad((yr < 1 ? -yr + 1 : yr) % 100, 2);
} //Year
case 'M': {
return pad(mo + 1, 0);
} //Month
case 'MM': {
return pad(mo + 1, 2);
} //Month
case 'MMM': {
return monthAbbrev[mo];
} //Month
case 'MMMM': {
return monthName[mo];
} //Month
case 'D': {
return pad(da, 0);
} //Day
case 'DD': {
return pad(da, 2);
} //Day
case 'TH': {
return ordinal(da);
}
case 'd': {
return dayOne[dy];
} //WeekDay
case 'dd': {
return dayTwo[dy];
}
case 'ddd': {
return dayAbbrev[dy];
} //WeekDay
case 'dddd': {
return dayName[dy];
}
case 'O': {
return pad(dayOfYear(input, { utc }), 0);
} //Day of Year (1-366)
case 'OO': {
return pad(dayOfYear(input, { utc }), 3);
} //Day of Year (1-366)
case 'Wy': {
return pad(isoWeekOfYear(input, { utc }).year, 0);
}
case 'Ww': {
return pad(isoWeekOfYear(input, { utc }).week, 0);
} //Week of Year (1-53)
case 'Www': {
return pad(isoWeekOfYear(input, { utc }).week, 2);
} //
case 'Wd': {
return pad(dayOfWeek(input, { utc }), 0);
}
case 'TZ': {
return timezone(o);
}
case 'GMT': {
return timezone(o, { gmt: true });
}
case 'AM': {
return ho < 12 ? 'AM' : empty;
} //AM / --
case 'PM': {
return ho < 12 ? empty : 'PM';
} //-- / PM
case 'T': {
return ho < 12 ? 'A' : 'P';
} //A / P
case 'TT': {
return ho < 12 ? 'AM' : 'PM';
} //AM / PM
case 'AD': {
return yr < 1 ? empty : 'AD';
} //-- / AD
case 'BC': {
return yr < 1 ? 'BC' : empty;
} //BC / --
case 'CE': {
return yr < 1 ? empty : 'CE';
} //-- / CE
case 'BCE': {
return yr < 1 ? 'BCE' : empty;
} //BCE / --
case 'EE': {
return yr < 1 ? 'BC' : 'AD';
} //BC / AD
case 'EEE': {
return yr < 1 ? 'BCE' : 'CE';
} //BCE / CE
case 'J': {
return pad(Math.floor(julian(input)), 0);
}
case 'Q': {
return pad(Math.floor((mo + 3) / 3), 0);
}
//RM: Month in roman numerals (UC);
//rm: Month in roman numerals (LC);
default: {
return token.slice(1, -1);
}
}
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZm9ybWF0LWRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckMsTUFBTSxTQUFTLEdBQ2IseUhBQXlILENBQUM7QUFFNUgsTUFBTSxLQUFLLEdBQXFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDNUQsT0FBTyxFQUFFLHdCQUF3QjtJQUNqQyxPQUFPLEVBQUUsK0JBQStCO0lBQ3hDLE9BQU8sRUFBRSxxQkFBcUI7SUFFOUIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsVUFBVSxFQUFFLGFBQWE7SUFDekIsUUFBUSxFQUFFLGNBQWM7SUFDeEIsUUFBUSxFQUFFLG9CQUFvQjtJQUM5QixTQUFTLEVBQUUsU0FBUztJQUNwQixhQUFhLEVBQUUsa0JBQWtCO0lBQ2pDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLGNBQWMsRUFBRSx3QkFBd0I7SUFDeEMsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixZQUFZLEVBQUUsNkJBQTZCO0lBQzNDLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLFdBQVcsRUFBRSx1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