From: Kunal Marwaha Date: Sat, 19 Nov 2016 07:27:43 +0000 (-0500) Subject: Create _isValid property for durations X-Git-Tag: 2.18.0~45^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a8639a4fac3d0310c327aa0cf3f57c45558c0c21;p=thirdparty%2Fmoment.git Create _isValid property for durations --- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 86765ba8b..924b05bd6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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 diff --git a/src/lib/duration/constructor.js b/src/lib/duration/constructor.js index fb01c7041..042d38f3e 100644 --- a/src/lib/duration/constructor.js +++ b/src/lib/duration/constructor.js @@ -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 index 000000000..799100c86 --- /dev/null +++ b/src/lib/duration/valid.js @@ -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; +} diff --git a/src/test/moment/duration.js b/src/test/moment/duration.js index c766961ba..3a60756de 100644 --- a/src/test/moment/duration.js +++ b/src/test/moment/duration.js @@ -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) {