corrade-nucleus-nucleons
/pack-rat/003_pack_rat/pack-rat/node_modules/moment/src/lib/duration/iso-string.js |
@@ -0,0 +1,56 @@ |
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) |
if (!this.isValid()) { |
return this.localeData().invalidDate(); |
} |
|
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' : ''); |
} |