/pack-rat/003_pack_rat/pack-rat/bower_components/moment/src/lib/moment/diff.js |
@@ -0,0 +1,62 @@ |
import absFloor from '../utils/abs-floor'; |
import { cloneWithOffset } from '../units/offset'; |
import { normalizeUnits } from '../units/aliases'; |
|
export function diff (input, units, asFloat) { |
var that, |
zoneDelta, |
delta, output; |
|
if (!this.isValid()) { |
return NaN; |
} |
|
that = cloneWithOffset(input, this); |
|
if (!that.isValid()) { |
return NaN; |
} |
|
zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; |
|
units = normalizeUnits(units); |
|
if (units === 'year' || units === 'month' || units === 'quarter') { |
output = monthDiff(this, that); |
if (units === 'quarter') { |
output = output / 3; |
} else if (units === 'year') { |
output = output / 12; |
} |
} else { |
delta = this - that; |
output = units === 'second' ? delta / 1e3 : // 1000 |
units === 'minute' ? delta / 6e4 : // 1000 * 60 |
units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 |
units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst |
units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst |
delta; |
} |
return asFloat ? output : absFloor(output); |
} |
|
function monthDiff (a, b) { |
// difference in months |
var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), |
// b is in (anchor - 1 month, anchor + 1 month) |
anchor = a.clone().add(wholeMonthDiff, 'months'), |
anchor2, adjust; |
|
if (b - anchor < 0) { |
anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); |
// linear across the month |
adjust = (b - anchor) / (anchor - anchor2); |
} else { |
anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); |
// linear across the month |
adjust = (b - anchor) / (anchor2 - anchor); |
} |
|
//check for negative zero, return zero if negative zero |
return -(wholeMonthDiff + adjust) || 0; |
} |