]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Create _isValid property for durations
authorKunal Marwaha <marwahaha@berkeley.edu>
Sat, 19 Nov 2016 07:27:43 +0000 (02:27 -0500)
committerIskren Chernev <iskren.chernev@gmail.com>
Thu, 2 Mar 2017 08:45:50 +0000 (10:45 +0200)
CONTRIBUTING.md
src/lib/duration/constructor.js
src/lib/duration/valid.js [new file with mode: 0644]
src/test/moment/duration.js

index 86765ba8b98ccd94203847c947b3fb1a9109ffb3..924b05bd6e23ba490ceb56ec46aa4a707a2681b5 100644 (file)
@@ -96,5 +96,5 @@ Once you become a member:
 But also:
 * be active in the repositories
 * pick up work nobody else wants to
-* attent a montly meeting
+* attend a monthly meeting
 * participate in the internal slack group
index fb01c7041375a208f10d50007037751e89c298d3..042d38f3eb2a437f78de9c561e4f6e420eaf1691 100644 (file)
@@ -1,17 +1,21 @@
 import { normalizeObjectUnits } from '../units/aliases';
 import { getLocale } from '../locale/locales';
+import isDurationValid from './valid.js';
 
 export function Duration (duration) {
-    var normalizedInput = normalizeObjectUnits(duration),
-        years = normalizedInput.year || 0,
-        quarters = normalizedInput.quarter || 0,
-        months = normalizedInput.month || 0,
-        weeks = normalizedInput.week || 0,
-        days = normalizedInput.day || 0,
-        hours = normalizedInput.hour || 0,
-        minutes = normalizedInput.minute || 0,
-        seconds = normalizedInput.second || 0,
-        milliseconds = normalizedInput.millisecond || 0;
+    var normalizedInput = normalizeObjectUnits(duration);
+
+    this._isValid = isDurationValid(normalizedInput);
+
+    var years = this._isValid && normalizedInput.year || 0,
+        quarters = this._isValid && normalizedInput.quarter || 0,
+        months = this._isValid && normalizedInput.month || 0,
+        weeks = this._isValid && normalizedInput.week || 0,
+        days = this._isValid && normalizedInput.day || 0,
+        hours = this._isValid && normalizedInput.hour || 0,
+        minutes = this._isValid && normalizedInput.minute || 0,
+        seconds = this._isValid && normalizedInput.second || 0,
+        milliseconds = this._isValid && normalizedInput.millisecond || 0;
 
     // representation for dateAddRemove
     this._milliseconds = +milliseconds +
diff --git a/src/lib/duration/valid.js b/src/lib/duration/valid.js
new file mode 100644 (file)
index 0000000..799100c
--- /dev/null
@@ -0,0 +1,9 @@
+export default function isDurationValid(m) {
+    for (var key in m) {
+        if (['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'].indexOf(key) === -1 ||
+        m[key] !== undefined && isNaN(parseInt(m[key]))) {
+            return false;
+        }
+    }
+    return true;
+}
index c766961ba725fd23491f8c13aa18a756f237ec64..3a60756de9351031b8288a17499fc7cd8728aa5c 100644 (file)
@@ -53,10 +53,17 @@ test('milliseconds instantiation', function (assert) {
 
 test('undefined instantiation', function (assert) {
     assert.equal(moment.duration(undefined).milliseconds(), 0, 'milliseconds');
+    assert.equal(moment.duration(undefined)._isValid, true, '_isValid');
 });
 
 test('null instantiation', function (assert) {
     assert.equal(moment.duration(null).milliseconds(), 0, 'milliseconds');
+    assert.equal(moment.duration(null)._isValid, true, '_isValid');
+});
+
+test('NaN instantiation', function (assert) {
+    assert.equal(moment.duration(NaN).milliseconds(), 0, 'milliseconds');
+    assert.equal(moment.duration(NaN)._isValid, false, '_isValid');
 });
 
 test('instantiation by type', function (assert) {