UNPKG

@cloudcome/utils-core

Version:
83 lines (82 loc) 2.34 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const _const = require("./const.cjs"); const type = require("./type.cjs"); const rules = [ ["years", _const.DATE_YEAR_MS], ["months", _const.DATE_MONTH_MS], ["days", _const.DATE_DAY_MS], ["hours", _const.DATE_HOUR_MS], ["minutes", _const.DATE_MINUTE_MS], ["seconds", _const.DATE_SECOND_MS] ]; function timeFrom(duration) { const td = type.isString(duration) ? timeParse(duration) : duration; return rules.reduce((acc, [key, time]) => acc + (td[key] || 0) * time, 0); } const durationMatchRules = [ [/(\d+)y/i, "years"], [/(\d+)M/, "months"], [/(\d+)d/i, "days"], [/(\d+)h/i, "hours"], [/(\d+)m/, "minutes"], [/(\d+)s/, "seconds"] ]; function timeParse(duration) { const result = {}; for (const [regex, key] of durationMatchRules) { const match = duration.match(regex); if (match) result[key] = Number(match[1]); else result[key] = 0; } return result; } function _timeAbsolute(timeMs, maxPoint) { const minPoint = "S"; const defines = [ ["D", "days", _const.DATE_DAY_MS], ["h", "hours", _const.DATE_HOUR_MS], ["m", "minutes", _const.DATE_MINUTE_MS], ["s", "seconds", _const.DATE_SECOND_MS], ["S", "milliseconds", 1] ]; const minIndex = defines.findIndex((item) => item[0] === maxPoint); const maxIndex = defines.findIndex((item) => item[0] === minPoint); let timeMsFinal = timeMs; const dao = { years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 }; for (let i = minIndex; i <= maxIndex; i++) { const mode = defines[i]; const base = mode[2]; const value = Math.floor(timeMsFinal / base); timeMsFinal = timeMsFinal - value * base; dao[mode[1]] = value; } return dao; } function timeToDays(timeMs) { return _timeAbsolute(timeMs, "D"); } function timeToHours(timeMs) { return _timeAbsolute(timeMs, "h"); } function timeToMinutes(timeMs) { return _timeAbsolute(timeMs, "m"); } function timeToSeconds(timeMs) { return _timeAbsolute(timeMs, "s"); } exports.timeFrom = timeFrom; exports.timeParse = timeParse; exports.timeToDays = timeToDays; exports.timeToHours = timeToHours; exports.timeToMinutes = timeToMinutes; exports.timeToSeconds = timeToSeconds; //# sourceMappingURL=time.cjs.map