diff options
author | Mario Vavti <mario@mariovavti.com> | 2015-11-18 23:50:42 +0100 |
---|---|---|
committer | Mario Vavti <mario@mariovavti.com> | 2015-11-18 23:50:42 +0100 |
commit | e4145deeb7a72ac321113fde672e1b499ecb0d2d (patch) | |
tree | ce2fb59fd9d2ec1d13ea0960215967600098ca13 /library/moment/src/lib/duration/bubble.js | |
parent | 68da4d90dcbda1240ae014768a66a164fd5d2b36 (diff) | |
download | volse-hubzilla-e4145deeb7a72ac321113fde672e1b499ecb0d2d.tar.gz volse-hubzilla-e4145deeb7a72ac321113fde672e1b499ecb0d2d.tar.bz2 volse-hubzilla-e4145deeb7a72ac321113fde672e1b499ecb0d2d.zip |
some events refacturing
Diffstat (limited to 'library/moment/src/lib/duration/bubble.js')
-rw-r--r-- | library/moment/src/lib/duration/bubble.js | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/library/moment/src/lib/duration/bubble.js b/library/moment/src/lib/duration/bubble.js new file mode 100644 index 000000000..0c4a336ec --- /dev/null +++ b/library/moment/src/lib/duration/bubble.js @@ -0,0 +1,61 @@ +import absFloor from '../utils/abs-floor'; +import absCeil from '../utils/abs-ceil'; +import { createUTCDate } from '../create/date-from-array'; + +export function bubble () { + var milliseconds = this._milliseconds; + var days = this._days; + var months = this._months; + var data = this._data; + var seconds, minutes, hours, years, monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if (!((milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0))) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; +} + +export function daysToMonths (days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return days * 4800 / 146097; +} + +export function monthsToDays (months) { + // the reverse of daysToMonths + return months * 146097 / 4800; +} |