UNPKG

vtils

Version:

一个面向业务的 JavaScript/TypeScript 实用程序库。

71 lines (70 loc) 2.77 kB
"use strict"; 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; }