seconds = normalizedInput.second || 0,
milliseconds = normalizedInput.millisecond || 0;
- // store reference to input for deterministic cloning
- this._input = duration;
-
// representation for dateAddRemove
this._milliseconds = +milliseconds +
seconds * 1e3 + // 1000
// duration
moment.duration = function (input, key) {
- var isDuration = moment.isDuration(input),
- isNumber = (typeof input === 'number'),
- duration = (isDuration ? input._input : (isNumber ? {} : input)),
+ var duration = input,
// matching against regexp is expensive, do it on demand
match = null,
sign,
timeEmpty,
dateTimeEmpty;
- if (isNumber) {
+ if (moment.isDuration(input)) {
+ duration = {
+ ms: input._milliseconds,
+ d: input._days,
+ M: input._months
+ };
+ } else if (typeof input === 'number') {
+ duration = {};
if (key) {
duration[key] = input;
} else {
ret = new Duration(duration);
- if (isDuration && input.hasOwnProperty('_lang')) {
+ if (moment.isDuration(input) && input.hasOwnProperty('_lang')) {
ret._lang = input._lang;
}
minutes: 9,
seconds: 20,
milliseconds: 12
- });
+ }),
+ modified = moment.duration(1, 'day').add(moment.duration(1, 'day'));
- test.expect(3);
+ test.expect(4);
test.deepEqual(moment.duration(simple), simple, "simple clones are equal");
test.deepEqual(moment.duration(lengthy), lengthy, "lengthy clones are equal");
test.deepEqual(moment.duration(complicated), complicated, "complicated clones are equal");
+ test.deepEqual(moment.duration(modified), modified, "cloning modified duration works");
test.done();
},