| 'use strict'; |
| var fails = require('../internals/fails'); |
| var padStart = require('../internals/string-pad').start; |
| |
| var abs = Math.abs; |
| var DatePrototype = Date.prototype; |
| var getTime = DatePrototype.getTime; |
| var nativeDateToISOString = DatePrototype.toISOString; |
| |
| // `Date.prototype.toISOString` method implementation |
| // https://tc39.github.io/ecma262/#sec-date.prototype.toisostring |
| // PhantomJS / old WebKit fails here: |
| module.exports = (fails(function () { |
| return nativeDateToISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z'; |
| }) || !fails(function () { |
| nativeDateToISOString.call(new Date(NaN)); |
| })) ? function toISOString() { |
| if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value'); |
| var date = this; |
| var year = date.getUTCFullYear(); |
| var milliseconds = date.getUTCMilliseconds(); |
| var sign = year < 0 ? '-' : year > 9999 ? '+' : ''; |
| return sign + padStart(abs(year), sign ? 6 : 4, 0) + |
| '-' + padStart(date.getUTCMonth() + 1, 2, 0) + |
| '-' + padStart(date.getUTCDate(), 2, 0) + |
| 'T' + padStart(date.getUTCHours(), 2, 0) + |
| ':' + padStart(date.getUTCMinutes(), 2, 0) + |
| ':' + padStart(date.getUTCSeconds(), 2, 0) + |
| '.' + padStart(milliseconds, 3, 0) + |
| 'Z'; |
| } : nativeDateToISOString; |