@cloudcome/utils-core
Version:
cloudcome core utils
83 lines (82 loc) • 2.34 kB
JavaScript
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
;