UNPKG

date-flywen

Version:

a simple date format javascript library

78 lines (76 loc) 1.92 kB
function setDatePart(date, parts, value, local) { date[`set${parts}`](value); } function buildRegexp(pattern) { let local = pattern.indexOf("O") > -1; let matches = [ { pattern: /y{1,4}/, regexp: "\\d{1,4}", fn: (date, value) => { setDatePart(date, "FullYear", value, local); } }, { pattern: /M{1,2}/, regexp: "\\d{1,2}", fn: (date, value) => { setDatePart(date, "Month", value - 1, local); } }, { pattern: /(?<!\\)(d{1,2})/, regexp: "\\d{1,2}", fn: (date, value) => { setDatePart(date, "Date", value, local); } }, { pattern: /h{1,2}/, regexp: "\\d{1,2}", fn: (date, value) => { setDatePart(date, "Hours", value, local); } }, { pattern: /m{1,2}/, regexp: "\\d{1,2}", fn: (date, value) => { setDatePart(date, "Minutes", value, local); } }, { pattern: /s{1,2}/, regexp: "\\d{1,2}", fn: (date, value) => { setDatePart(date, "Seconds", value, local); } }, { pattern: /S{1,2}/, regexp: "\\d{1,4}", fn: (date, value) => { setDatePart(date, "Milliseconds", value, local); } }, { pattern: /O/, regexp: "[+-]\\d{4}", fn: (date, value) => { setDatePart(date, "Month", value, local); } } ]; let regexp = matches.reduce((prev, next) => { if(next.pattern.test(prev.pattern)) { next.index = prev.pattern.match(next.pattern).index; prev.pattern = prev.pattern.replace(next.pattern, "(" + next.regexp + ")"); } else { next.index = -1; } return prev; }, {pattern, index: []}); matches = matches.filter(m => m.index > -1); return [regexp, matches]; } export { buildRegexp, setDatePart };