From 08084a891f3b5aba12a67aba80884c52cb3be4d8 Mon Sep 17 00:00:00 2001 From: Alanscut Date: Wed, 20 May 2020 15:13:48 +0800 Subject: [PATCH] fix issue #5075 Remove destructive judgment --- src/lib/create/valid.js | 40 ++++++++++++++++++------------------- src/test/moment/is_valid.js | 7 +++++++ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/lib/create/valid.js b/src/lib/create/valid.js index b25c7d116..08c62a51a 100644 --- a/src/lib/create/valid.js +++ b/src/lib/create/valid.js @@ -4,24 +4,23 @@ import getParsingFlags from '../create/parsing-flags'; import some from '../utils/some'; export function isValid(m) { - if (m._isValid == null) { + var isNowValid = (m._d && !isNaN(m._d.getTime())); + if (isNowValid) { var flags = getParsingFlags(m), parsedParts = some.call(flags.parsedDateParts, function (i) { return i != null; - }), - isNowValid = - !isNaN(m._d.getTime()) && - flags.overflow < 0 && - !flags.empty && - !flags.invalidEra && - !flags.invalidMonth && - !flags.invalidWeekday && - !flags.weekdayMismatch && - !flags.nullInput && - !flags.invalidFormat && - !flags.userInvalidated && - (!flags.meridiem || (flags.meridiem && parsedParts)); - + }); + isNowValid = + flags.overflow < 0 && + !flags.empty && + !flags.invalidEra && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.weekdayMismatch && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); if (m._strict) { isNowValid = isNowValid && @@ -29,12 +28,11 @@ export function isValid(m) { flags.unusedTokens.length === 0 && flags.bigHour === undefined; } - - if (Object.isFrozen == null || !Object.isFrozen(m)) { - m._isValid = isNowValid; - } else { - return isNowValid; - } + } + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } else { + return isNowValid; } return m._isValid; } diff --git a/src/test/moment/is_valid.js b/src/test/moment/is_valid.js index 6da382303..600c37d36 100644 --- a/src/test/moment/is_valid.js +++ b/src/test/moment/is_valid.js @@ -561,3 +561,10 @@ test('format locale', function (assert) { assert.ok(moment(a[i][0], a[i][1], a[i][2]).isValid()); } }); + +test('destructive operation', function (assert) { + assert.equal(moment('2018-05-15').add(100, 'years').isValid(), true, 'add 100 years is valid'); + assert.equal(moment('2018-05-15').add(1000000, 'years').isValid(), false, 'add 1000000 years is invalid'); + assert.equal(moment('2018-05-15').subtract(100, 'years').isValid(), true, 'subtract 100 years is valid'); + assert.equal(moment('2018-05-15').subtract(1000000, 'years').isValid(), false, 'subtract 1000000 years is invalid'); +}) -- 2.47.2