date-manip
Version:
A lightweight JavaScript date utility library that provides modularity, high performance, and additional features. It supports various date operations, including date addition and subtraction, formatting, comparison, etc.
38 lines (37 loc) • 1.19 kB
JavaScript
import units from "./units.mjs";
const { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND, UTC_OFFSET } = units;
function escapeRegex(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
const TOKEN_MAP = {
YYYY: { pattern: "(\\d{1,4})", key: YEAR },
// 年份
// YY: { pattern: '(\\d{1,2})', key: YEAR }, // 年份
MM: { pattern: "(\\d{1,2})", key: MONTH },
// 月份
DD: { pattern: "(\\d{1,2})", key: DATE },
// 日期
HH: { pattern: "(\\d{1,2})", key: HOUR },
// 小时
mm: { pattern: "(\\d{1,2})", key: MINUTE },
// 分钟
ss: { pattern: "(\\d{1,2})", key: SECOND },
// 秒
SSS: { pattern: "(\\d{1,3})", key: MILLISECOND },
// 毫秒
Z: { pattern: "(Z|[+-]\\d{2}(?::?\\d{2})?)", key: UTC_OFFSET }
// 时区
};
const TOKEN_KEYS = Object.keys(TOKEN_MAP).sort((a, b) => b.length - a.length);
const TOKEN_PATTERN = new RegExp(`(${TOKEN_KEYS.join("|")})`, "g");
function compile(formatString) {
const matchedTokens = [];
const pattern = escapeRegex(formatString).replace(TOKEN_PATTERN, (m) => {
matchedTokens.push(m);
return TOKEN_MAP[m].pattern;
});
return { pattern, tokens: matchedTokens };
}
export {
compile as default
};