date-fns
Version:
Modern JavaScript date utility library
119 lines (106 loc) • 2.86 kB
JavaScript
import { buildMatchPatternFn } from "../../_lib/buildMatchPatternFn.js";
import { buildMatchFn } from "../../_lib/buildMatchFn.js";
const matchOrdinalNumberPattern = /^第?\d+(年|四半期|月|週|日|時|分|秒)?/i;
const parseOrdinalNumberPattern = /\d+/i;
const matchEraPatterns = {
narrow: /^(B\.?C\.?|A\.?D\.?)/i,
abbreviated: /^(紀元[前後]|西暦)/i,
wide: /^(紀元[前後]|西暦)/i,
};
const parseEraPatterns = {
narrow: [/^B/i, /^A/i],
any: [/^(紀元前)/i, /^(西暦|紀元後)/i],
};
const matchQuarterPatterns = {
narrow: /^[1234]/i,
abbreviated: /^Q[1234]/i,
wide: /^第[1234一二三四1234]四半期/i,
};
const parseQuarterPatterns = {
any: [/(1|一|1)/i, /(2|二|2)/i, /(3|三|3)/i, /(4|四|4)/i],
};
const matchMonthPatterns = {
narrow: /^([123456789]|1[012])/,
abbreviated: /^([123456789]|1[012])月/i,
wide: /^([123456789]|1[012])月/i,
};
const parseMonthPatterns = {
any: [
/^1\D/,
/^2/,
/^3/,
/^4/,
/^5/,
/^6/,
/^7/,
/^8/,
/^9/,
/^10/,
/^11/,
/^12/,
],
};
const matchDayPatterns = {
narrow: /^[日月火水木金土]/,
short: /^[日月火水木金土]/,
abbreviated: /^[日月火水木金土]/,
wide: /^[日月火水木金土]曜日/,
};
const parseDayPatterns = {
any: [/^日/, /^月/, /^火/, /^水/, /^木/, /^金/, /^土/],
};
const matchDayPeriodPatterns = {
any: /^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i,
};
const parseDayPeriodPatterns = {
any: {
am: /^(A|午前)/i,
pm: /^(P|午後)/i,
midnight: /^深夜|真夜中/i,
noon: /^正午/i,
morning: /^朝/i,
afternoon: /^午後/i,
evening: /^夜/i,
night: /^深夜/i,
},
};
export const match = {
ordinalNumber: buildMatchPatternFn({
matchPattern: matchOrdinalNumberPattern,
parsePattern: parseOrdinalNumberPattern,
valueCallback: function (value) {
return parseInt(value, 10);
},
}),
era: buildMatchFn({
matchPatterns: matchEraPatterns,
defaultMatchWidth: "wide",
parsePatterns: parseEraPatterns,
defaultParseWidth: "any",
}),
quarter: buildMatchFn({
matchPatterns: matchQuarterPatterns,
defaultMatchWidth: "wide",
parsePatterns: parseQuarterPatterns,
defaultParseWidth: "any",
valueCallback: (index) => index + 1,
}),
month: buildMatchFn({
matchPatterns: matchMonthPatterns,
defaultMatchWidth: "wide",
parsePatterns: parseMonthPatterns,
defaultParseWidth: "any",
}),
day: buildMatchFn({
matchPatterns: matchDayPatterns,
defaultMatchWidth: "wide",
parsePatterns: parseDayPatterns,
defaultParseWidth: "any",
}),
dayPeriod: buildMatchFn({
matchPatterns: matchDayPeriodPatterns,
defaultMatchWidth: "any",
parsePatterns: parseDayPeriodPatterns,
defaultParseWidth: "any",
}),
};