UNPKG

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.

37 lines (36 loc) 1.2 kB
"use strict"; const units = require("./units.js"); 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 }; } module.exports = compile;