@onesy/date
Version:
Time and date utils library
53 lines (52 loc) • 2.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const is_1 = __importDefault(require("@onesy/utils/is"));
const clamp_1 = __importDefault(require("@onesy/utils/clamp"));
function duration(value, unitAbbr = false, raw = false, separator = ' ', display = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'], options) {
const l = (options === null || options === void 0 ? void 0 : options.l) || (value => value);
if ((0, is_1.default)('number', value)) {
let result = '';
let milliseconds = value;
const values = [];
const valuesRaw = {};
const millisecondsInTime = {
millisecond: 1,
second: 1e3,
minute: 60 * 1e3,
hour: 60 * 60 * 1e3,
day: 24 * 60 * 60 * 1e3,
month: 30 * 24 * 60 * 60 * 1e3,
year: 12 * 30 * 24 * 60 * 60 * 1e3
};
const unitsAbbr = {
millisecond: 'ms',
second: 's',
minute: 'm',
hour: 'h',
day: 'd',
month: 'mo',
year: 'y'
};
for (const unit of display) {
if (millisecondsInTime[unit]) {
const value_ = (0, clamp_1.default)(Math.floor(milliseconds / millisecondsInTime[unit]), 0);
if (value_ > 0) {
milliseconds -= value_ * millisecondsInTime[unit];
valuesRaw[unit] = value_;
let valueTime = value_;
if (unitAbbr)
valueTime = `${valueTime} ${l(unitsAbbr[unit])}`;
else
valueTime = `${valueTime} ${l(`${unit}${value_ > 1 ? 's' : ''}`)}`;
values.push(valueTime);
}
}
}
values.forEach((value_) => result += `${separator}${value_}`);
return (raw ? valuesRaw : result.trim());
}
}
exports.default = duration;