diff --git a/src/plugin/duration/index.js b/src/plugin/duration/index.js index e2060c344..8af53f4bb 100644 --- a/src/plugin/duration/index.js +++ b/src/plugin/duration/index.js @@ -190,15 +190,7 @@ class Duration { } get(unit) { - let base = this.$ms - const pUnit = prettyUnit(unit) - if (pUnit === 'milliseconds') { - base %= 1000 - } else if (pUnit === 'weeks') { - base = roundNumber(base / unitToMS[pUnit]) - } else { - base = this.$d[pUnit] - } + const base = this.$d[`${prettyUnit(unit)}`] return base || 0 // a === 0 will be true on both 0 and -0 } @@ -266,6 +258,7 @@ const manipulateDuration = (date, duration, k) => .add(duration.minutes() * k, 'm') .add(duration.seconds() * k, 's') .add(duration.milliseconds() * k, 'ms') + .add(duration.weeks() * k, 'w') export default (option, Dayjs, dayjs) => { $d = dayjs diff --git a/test/plugin/duration.test.js b/test/plugin/duration.test.js index 3e726af91..da47143ea 100644 --- a/test/plugin/duration.test.js +++ b/test/plugin/duration.test.js @@ -261,7 +261,7 @@ describe('Days', () => { }) describe('Weeks', () => { - expect(dayjs.duration(1000000000).weeks()).toBe(1) + expect(dayjs.duration(1000000000).weeks()).toBe(0) expect(dayjs.duration(1000000000).asWeeks().toFixed(2)).toBe('1.65') }) @@ -294,7 +294,8 @@ describe('Format', () => { .add(16, 'days') .add(10, 'months') .add(22, 'years') - expect(d.format()).toBe('0022-10-16T13:35:15') + .add(1, 'weeks') + expect(d.format()).toBe('0022-10-23T13:35:15') }) test('with formatStr for all tokens', () => {