]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
fix issue #5075 Remove destructive judgment
authorAlanscut <wp_scut@163.com>
Wed, 20 May 2020 07:13:48 +0000 (15:13 +0800)
committerIskren Chernev <me@iskren.info>
Sat, 23 Dec 2023 10:56:27 +0000 (12:56 +0200)
src/lib/create/valid.js
src/test/moment/is_valid.js

index b25c7d1161f6b400c26a6cd89bb357943fc9b32e..08c62a51aa84fccf4ad1657de6b6ab319ee926ee 100644 (file)
@@ -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;
 }
index 6da3823030e5a0742a3ac79c2b2e3b7b4f430e24..600c37d36a3ecb438022ccfb60b4a9b4946edd15 100644 (file)
@@ -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');
+})