Fix Date.prototype.toString() and toISOString() (#3175)
The implementation was incorrect for negative years and years bigger than 9999. -1 was 000/ because the negative (year%10) was added to '0' character, years bigger than 9999 was truncated to 4 digits. ES5.1 15.9.1.15.1 defines extended years format with 6 digits, but toString() and toISOString() sections don't mention anything about extended years. ES6 20.3.4.3 already clarifies that Date.prototype.toISOString() should use this extended year format if it is necessary. Changes: - Date.prototype.toString() uses 4 digits for years by default, 5 or 6 if it is necessary and put '-' sign for negative years, no sign for positive years. Date.prototype.toString() was implementation dependent until ES9, but ES9 already specify exactly this format. - Date.prototype.toISOString() uses fixed 4 digits for years 0 - 9999, otherwise sign + 6 digits (extended years). - Tests added for corner cases. JerryScript-DCO-1.0-Signed-off-by: Csaba Osztrogonác oszi@inf.u-szeged.hu
This commit is contained in:
committed by
Robert Fancsik
parent
fbca37fde6
commit
32c74fff22
@@ -142,3 +142,29 @@ assert (Date (2015, 1, 1) == (new Date ()).toString ());
|
||||
assert (Date (Number.NaN) == Date ());
|
||||
|
||||
assert (new Date ("2015-07-08T11:29:05.023Z").toISOString() == "2015-07-08T11:29:05.023Z");
|
||||
|
||||
// corner cases
|
||||
assert (new Date (-8640000000000001).toString() == "Invalid Date")
|
||||
assert (new Date (-8640000000000000).toString() == "Tue Apr 20 -271821 00:00:00 GMT+00:00")
|
||||
|
||||
assert (new Date(-62167219200001).toString() == "Fri Dec 31 -0001 23:59:59 GMT+00:00")
|
||||
assert (new Date(-62167219200000).toString() == "Sat Jan 01 0000 00:00:00 GMT+00:00")
|
||||
|
||||
assert (new Date(-61851600000001).toString() == "Thu Dec 31 0009 23:59:59 GMT+00:00")
|
||||
assert (new Date(-61851600000000).toString() == "Fri Jan 01 0010 00:00:00 GMT+00:00")
|
||||
|
||||
assert (new Date(-59011459200001).toString() == "Thu Dec 31 0099 23:59:59 GMT+00:00")
|
||||
assert (new Date(-59011459200000).toString() == "Fri Jan 01 0100 00:00:00 GMT+00:00")
|
||||
|
||||
assert (new Date(-30610224000001).toString() == "Tue Dec 31 0999 23:59:59 GMT+00:00")
|
||||
assert (new Date(-30610224000000).toString() == "Wed Jan 01 1000 00:00:00 GMT+00:00")
|
||||
|
||||
assert (new Date(-1).toString() == "Wed Dec 31 1969 23:59:59 GMT+00:00")
|
||||
assert (new Date(0).toString() == "Thu Jan 01 1970 00:00:00 GMT+00:00")
|
||||
assert (new Date(1).toString() == "Thu Jan 01 1970 00:00:00 GMT+00:00")
|
||||
|
||||
assert (new Date(253402300799999).toString() == "Fri Dec 31 9999 23:59:59 GMT+00:00")
|
||||
assert (new Date(253402300800000).toString() == "Sat Jan 01 10000 00:00:00 GMT+00:00")
|
||||
|
||||
assert (new Date (8640000000000000).toString() == "Sat Sep 13 275760 00:00:00 GMT+00:00")
|
||||
assert (new Date (8640000000000001).toString() == "Invalid Date")
|
||||
|
||||
Reference in New Issue
Block a user