| | 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' : ''); |
| | } |
| |
|