vtils
Version:
一个面向业务的 JavaScript/TypeScript 实用程序库。
71 lines (70 loc) • 2.77 kB
JavaScript
;
exports.__esModule = true;
exports.intervalToRestrictiveDuration = intervalToRestrictiveDuration;
var _dateFns = require("date-fns");
var _anyToDate = require("./anyToDate");
// ref: https://github.com/date-fns/date-fns/blob/master/src/intervalToDuration/index.js
function intervalToRestrictiveDuration(start, end, target) {
if (target === void 0) {
target = 'year';
}
var dateLeft = (0, _anyToDate.anyToDate)(start);
var dateRight = (0, _anyToDate.anyToDate)(end);
if (!(0, _dateFns.isValid)(dateLeft)) {
throw new RangeError('Start Date is invalid');
}
if (!(0, _dateFns.isValid)(dateRight)) {
throw new RangeError('End Date is invalid');
}
var duration = {
years: 0,
months: 0,
days: 0,
hours: 0,
minutes: 0,
seconds: 0,
milliseconds: 0
};
var remaining = dateLeft;
var sign = (0, _dateFns.compareAsc)(dateLeft, dateRight);
if (target === 'year') {
duration.years = Math.abs((0, _dateFns.differenceInYears)(remaining, dateRight));
}
if (target === 'year' || target === 'month') {
remaining = (0, _dateFns.sub)(remaining, {
years: sign * duration.years
});
duration.months = Math.abs((0, _dateFns.differenceInMonths)(remaining, dateRight));
}
if (target === 'year' || target === 'month' || target === 'day') {
remaining = (0, _dateFns.sub)(remaining, {
months: sign * duration.months
});
duration.days = Math.abs((0, _dateFns.differenceInDays)(remaining, dateRight));
}
if (target === 'year' || target === 'month' || target === 'day' || target === 'hour') {
remaining = (0, _dateFns.sub)(remaining, {
days: sign * duration.days
});
duration.hours = Math.abs((0, _dateFns.differenceInHours)(remaining, dateRight));
}
if (target === 'year' || target === 'month' || target === 'day' || target === 'hour' || target === 'minute') {
remaining = (0, _dateFns.sub)(remaining, {
hours: sign * duration.hours
});
duration.minutes = Math.abs((0, _dateFns.differenceInMinutes)(remaining, dateRight));
}
if (target === 'year' || target === 'month' || target === 'day' || target === 'hour' || target === 'minute' || target === 'second') {
remaining = (0, _dateFns.sub)(remaining, {
minutes: sign * duration.minutes
});
duration.seconds = Math.abs((0, _dateFns.differenceInSeconds)(remaining, dateRight));
}
if (target === 'year' || target === 'month' || target === 'day' || target === 'hour' || target === 'minute' || target === 'second' || target === 'millisecond') {
remaining = (0, _dateFns.sub)(remaining, {
seconds: sign * duration.seconds
});
duration.milliseconds = Math.abs((0, _dateFns.differenceInMilliseconds)(remaining, dateRight));
}
return duration;
}