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/iso-string.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/iso-string.js')
-rw-r--r-- | library/moment/src/lib/duration/iso-string.js | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/library/moment/src/lib/duration/iso-string.js b/library/moment/src/lib/duration/iso-string.js new file mode 100644 index 000000000..f33a968da --- /dev/null +++ b/library/moment/src/lib/duration/iso-string.js @@ -0,0 +1,52 @@ +import absFloor from '../utils/abs-floor'; +var abs = Math.abs; + +export function toISOString() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + var seconds = abs(this._milliseconds) / 1000; + var days = abs(this._days); + var months = abs(this._months); + var minutes, hours, years; + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var Y = years; + var M = months; + var D = days; + var h = hours; + var m = minutes; + var s = seconds; + var total = this.asSeconds(); + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (total < 0 ? '-' : '') + + 'P' + + (Y ? Y + 'Y' : '') + + (M ? M + 'M' : '') + + (D ? D + 'D' : '') + + ((h || m || s) ? 'T' : '') + + (h ? h + 'H' : '') + + (m ? m + 'M' : '') + + (s ? s + 'S' : ''); +} |