@technobuddha/library
Version:
A large library of useful functions
127 lines (126 loc) • 7.04 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatDate = void 0;
var constants_1 = require("../constants");
var padNumber_1 = __importDefault(require("../padNumber"));
var ordinal_1 = __importDefault(require("../ordinal"));
var getDayOfYear_1 = __importDefault(require("../getDayOfYear"));
var getISOWeekOfYear_1 = __importDefault(require("../getISOWeekOfYear"));
var getTimezone_1 = __importDefault(require("../getTimezone"));
var getJulian_1 = __importDefault(require("../getJulian"));
var getDayOfWeek_1 = __importDefault(require("../getDayOfWeek"));
var 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|"[^"]*"|'[^']*'/ug;
var 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',
'cookie': 'dddd, DD MMM YYYY hh:mm:ss GMT',
});
var dayOne = ['U', 'M', 'T', 'W', 'R', 'F', 'S'];
var dayTwo = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
var dayAbbrev = ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'];
var dayName = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var monthAbbrev = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var 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 __namedParameters see {@link Options}
* @default UTC false
*/
function formatDate(input, mask, _a) {
var _b = _a === void 0 ? {} : _a, _c = _b.UTC, UTC = _c === void 0 ? false : _c;
mask = mask ? (mask in masks ? masks[mask] : mask) : masks.default;
var da = UTC ? input.getUTCDate() : input.getDate();
var dy = UTC ? input.getUTCDay() : input.getDay();
var mo = UTC ? input.getUTCMonth() : input.getMonth();
var yr = UTC ? input.getUTCFullYear() : input.getFullYear();
var ho = UTC ? input.getUTCHours() : input.getHours();
var mi = UTC ? input.getUTCMinutes() : input.getMinutes();
var se = UTC ? input.getUTCSeconds() : input.getSeconds();
var ms = UTC ? input.getUTCMilliseconds() : input.getMilliseconds();
var o = UTC ? 0 : input.getTimezoneOffset();
return mask.replace(tokenizer, function (token) {
switch (token) {
case 'h': return padNumber_1.default(ho, 0); //Hours (24)
case 'hh': return padNumber_1.default(ho, 2); //Hours (24)
case 'H': return padNumber_1.default(ho % 12 || 12, 0); //Hours (12)
case 'HH': return padNumber_1.default(ho % 12 || 12, 2); //Hours (12)
case 'm': return padNumber_1.default(mi, 0); //Minutes
case 'mm': return padNumber_1.default(mi, 2); //Minutes
case 's': return padNumber_1.default(se, 0); //Seconds
case 'ss': return padNumber_1.default(se, 2); //Seconds
case 'sss': return padNumber_1.default(ho * constants_1.secondsPerHour + mi * constants_1.secondsPerMinute + se, 0); //Seconds
case 'f': return padNumber_1.default(ms, 0); //Milliseconds
case 'ff': return padNumber_1.default(ms, 3); //Milliseconds
case 'YYYY': return padNumber_1.default(yr < 1 ? -yr + 1 : yr, 4); //Year
case 'YY': return padNumber_1.default((yr < 1 ? -yr + 1 : yr) % 100, 2); //Year
case 'M': return padNumber_1.default(mo + 1, 0); //Month
case 'MM': return padNumber_1.default(mo + 1, 2); //Month
case 'MMM': return monthAbbrev[mo]; //Month
case 'MMMM': return monthName[mo]; //Month
case 'D': return padNumber_1.default(da, 0); //Day
case 'DD': return padNumber_1.default(da, 2); //Day
case 'TH': return ordinal_1.default(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 padNumber_1.default(getDayOfYear_1.default(input, { UTC: UTC }), 0); //Day of Year (1-366)
case 'OO': return padNumber_1.default(getDayOfYear_1.default(input, { UTC: UTC }), 3); //Day of Year (1-366)
case 'Wy': return padNumber_1.default(getISOWeekOfYear_1.default(input, { UTC: UTC }).year, 0);
case 'Ww': return padNumber_1.default(getISOWeekOfYear_1.default(input, { UTC: UTC }).week, 0); //Week of Year (1-53)
case 'Www': return padNumber_1.default(getISOWeekOfYear_1.default(input, { UTC: UTC }).week, 2); //
case 'Wd': return padNumber_1.default(getDayOfWeek_1.default(input, { UTC: UTC }), 0);
case 'TZ': return getTimezone_1.default(o);
case 'GMT': return getTimezone_1.default(o, { GMT: true });
case 'AM': return ho < 12 ? 'AM' : ''; //AM / --
case 'PM': return ho < 12 ? '' : '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 ? '' : 'AD'; //-- / AD
case 'BC': return yr < 1 ? 'BC' : ''; //BC / --
case 'CE': return yr < 1 ? '' : 'CE'; //-- / CE
case 'BCE': return yr < 1 ? 'BCE' : ''; //BCE / --
case 'EE': return yr < 1 ? 'BC' : 'AD'; //BC / AD
case 'EEE': return yr < 1 ? 'BCE' : 'CE'; //BCE / CE
case 'J': return padNumber_1.default(Math.floor(getJulian_1.default(input)), 0);
case 'Q': return padNumber_1.default(Math.floor((mo + 3) / 3), 0);
//RM: Month in roman numerals (UC);
//rm: Month in roman numerals (LC);
default: return token.slice(1, -1);
}
});
}
exports.formatDate = formatDate;
exports.default = formatDate;