|
import absFloor from '../utils/abs-floor'; |
|
var abs = Math.abs; |
|
|
|
function sign(x) { |
|
return ((x > 0) - (x < 0)) || +x; |
|
} |
|
|
|
export function toISOString() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
|
minutes = absFloor(seconds / 60); |
|
hours = absFloor(minutes / 60); |
|
seconds %= 60; |
|
minutes %= 60; |
|
|
|
|
|
years = absFloor(months / 12); |
|
months %= 12; |
|
|
|
|
|
|
|
var Y = years; |
|
var M = months; |
|
var D = days; |
|
var h = hours; |
|
var m = minutes; |
|
var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; |
|
var total = this.asSeconds(); |
|
|
|
if (!total) { |
|
|
|
|
|
return 'P0D'; |
|
} |
|
|
|
var totalSign = total < 0 ? '-' : ''; |
|
var ymSign = sign(this._months) !== sign(total) ? '-' : ''; |
|
var daysSign = sign(this._days) !== sign(total) ? '-' : ''; |
|
var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; |
|
|
|
return totalSign + 'P' + |
|
(Y ? ymSign + Y + 'Y' : '') + |
|
(M ? ymSign + M + 'M' : '') + |
|
(D ? daysSign + D + 'D' : '') + |
|
((h || m || s) ? 'T' : '') + |
|
(h ? hmsSign + h + 'H' : '') + |
|
(m ? hmsSign + m + 'M' : '') + |
|
(s ? hmsSign + s + 'S' : ''); |
|
} |
|
|