--- /dev/null
+'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.es/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;