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 +
--- /dev/null
+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;
+}
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) {