UNPKG

farjs-app

Version:

FAR.js - Cross-platform File and Archive Manager app in your terminal

109 lines (97 loc) 2.69 kB
import { lazyFn } from "@farjs/filelist/utils.mjs"; /** * @typedef {{ * readonly year: number; * readonly month: number; * readonly date: number; * readonly hours: number; * readonly minutes: number; * readonly seconds: number; * }} DateTimeData */ const DateTimeUtil = { /** * @param {string} input * @returns {number} */ parseDateTime: (input) => { /** @type {() => DateTimeData | undefined} */ const MMddyyyyTime = () => { const regexRes = MMddyyyyTimeRegex().exec(input); if (regexRes) { return { month: parseInt(regexRes[1]), date: parseInt(regexRes[2]), year: parseInt(regexRes[3]), hours: parseInt(regexRes[4]), minutes: parseInt(regexRes[5]), seconds: 0, }; } return undefined; }; /** @type {() => DateTimeData | undefined} */ const ddMMyyTime = () => { const regexRes = ddMMyyTimeRegex().exec(input); if (regexRes) { return { date: parseInt(regexRes[1]), month: parseInt(regexRes[2]), year: parseInt(regexRes[3]), hours: parseInt(regexRes[4]), minutes: parseInt(regexRes[5]), seconds: 0, }; } return undefined; }; /** @type {() => DateTimeData | undefined} */ const yyyyMMddHHmmss = () => { const regexRes = yyyyMMddHHmmssRegex().exec(input); if (regexRes) { return { year: parseInt(regexRes[1]), month: parseInt(regexRes[2]), date: parseInt(regexRes[3]), hours: parseInt(regexRes[4]), minutes: parseInt(regexRes[5]), seconds: parseInt(regexRes[6]), }; } return undefined; }; const data = MMddyyyyTime() || ddMMyyTime() || yyyyMMddHHmmss(); if (data) { const fullYear = (() => { if (data.year < 100) { const after2000 = data.year + 2000; return after2000 > currYear ? data.year + 1900 : after2000; } return data.year; })(); return new Date( fullYear, data.month - 1, data.date, data.hours, data.minutes, data.seconds, ).getTime(); } return 0; }, }; const currYear = new Date().getFullYear(); /** @type {() => RegExp} */ const MMddyyyyTimeRegex = lazyFn( () => /(\d{2})-(\d{2})-(\d{4}) (\d{2}):(\d{2})/, ); /** @type {() => RegExp} */ const ddMMyyTimeRegex = lazyFn( () => /(\d{2})\.(\d{2})\.(\d{2}) (\d{2}):(\d{2})/, ); /** @type {() => RegExp} */ const yyyyMMddHHmmssRegex = lazyFn( () => /(\d{4})(\d{2})(\d{2})\.(\d{2})(\d{2})(\d{2})/, ); export default DateTimeUtil;