// This test checks that dates follow the range described in ecma262/#sec-date-time-string-format function shouldBe(actual, expected) { if (actual !== expected) throw new Error(`bad value: ${actual}`); } function shouldBeNaN(actual) { if (!Number.isNaN(actual)) throw new Error(`bad value: ${actual}`); } { let dateValue = Date.parse("275760-09-13T00:00:00.000Z"); shouldBe(dateValue, 8640000000000000); let date = new Date(dateValue); shouldBe(date.getUTCFullYear(), 275760); shouldBe(date.getUTCMonth(), 8); shouldBe(date.getUTCDate(), 13); shouldBe(date.getUTCHours(), 0); shouldBe(date.getUTCMinutes(), 0); shouldBe(date.getUTCSeconds(), 0); shouldBe(date.getUTCMilliseconds(), 0); } { let dateValue = Date.UTC(275760, 8, 13, 0, 0, 0, 0); shouldBe(dateValue, 8640000000000000); let date = new Date(dateValue); shouldBe(date.getUTCFullYear(), 275760); shouldBe(date.getUTCMonth(), 8); shouldBe(date.getUTCDate(), 13); shouldBe(date.getUTCHours(), 0); shouldBe(date.getUTCMinutes(), 0); shouldBe(date.getUTCSeconds(), 0); shouldBe(date.getUTCMilliseconds(), 0); } { let dateValue = Date.parse("275760-09-12T23:59:59.999Z"); shouldBe(dateValue, 8639999999999999); let date = new Date(dateValue); shouldBe(date.getUTCFullYear(), 275760); shouldBe(date.getUTCMonth(), 8); shouldBe(date.getUTCDate(), 12); shouldBe(date.getUTCHours(), 23); shouldBe(date.getUTCMinutes(), 59); shouldBe(date.getUTCSeconds(), 59); shouldBe(date.getUTCMilliseconds(), 999); } { let dateValue = Date.UTC(275760, 8, 12, 23, 59, 59, 999); shouldBe(dateValue, 8639999999999999); let date = new Date(dateValue); shouldBe(date.getUTCFullYear(), 275760); shouldBe(date.getUTCMonth(), 8); shouldBe(date.getUTCDate(), 12); shouldBe(date.getUTCHours(), 23); shouldBe(date.getUTCMinutes(), 59); shouldBe(date.getUTCSeconds(), 59); shouldBe(date.getUTCMilliseconds(), 999); } { let dateValue = Date.parse("275760-09-13T00:00:00.001Z"); shouldBeNaN(dateValue); } { let dateValue = Date.UTC(275760, 8, 13, 0, 0, 0, 1); shouldBeNaN(dateValue); } { let dateValue = Date.parse("-271821-04-20T00:00:00.000Z"); shouldBe(dateValue, -8640000000000000); let date = new Date(dateValue); shouldBe(date.getUTCFullYear(), -271821); shouldBe(date.getUTCMonth(), 3); shouldBe(date.getUTCDate(), 20); shouldBe(date.getUTCHours(), 0); shouldBe(date.getUTCMinutes(), 0); shouldBe(date.getUTCSeconds(), 0); shouldBe(date.getUTCMilliseconds(), 0); } { let dateValue = Date.UTC(-271821, 3, 20, 0, 0, 0, 0); shouldBe(dateValue, -8640000000000000); let date = new Date(dateValue); shouldBe(date.getUTCFullYear(), -271821); shouldBe(date.getUTCMonth(), 3); shouldBe(date.getUTCDate(), 20); shouldBe(date.getUTCHours(), 0); shouldBe(date.getUTCMinutes(), 0); shouldBe(date.getUTCSeconds(), 0); shouldBe(date.getUTCMilliseconds(), 0); } { let dateValue = Date.parse("-271821-04-20T00:00:00.001Z"); shouldBe(dateValue, -8639999999999999); let date = new Date(dateValue); shouldBe(date.getUTCFullYear(), -271821); shouldBe(date.getUTCMonth(), 3); shouldBe(date.getUTCDate(), 20); shouldBe(date.getUTCHours(), 0); shouldBe(date.getUTCMinutes(), 0); shouldBe(date.getUTCSeconds(), 0); shouldBe(date.getUTCMilliseconds(), 1); } { let dateValue = Date.UTC(-271821, 3, 20, 0, 0, 0, 1); shouldBe(dateValue, -8639999999999999); let date = new Date(dateValue); shouldBe(date.getUTCFullYear(), -271821); shouldBe(date.getUTCMonth(), 3); shouldBe(date.getUTCDate(), 20); shouldBe(date.getUTCHours(), 0); shouldBe(date.getUTCMinutes(), 0); shouldBe(date.getUTCSeconds(), 0); shouldBe(date.getUTCMilliseconds(), 1); } { let dateValue = Date.parse("-271821-04-19T23:59:59.999Z"); shouldBeNaN(dateValue); } { let dateValue = Date.UTC(-271821, 3, 19, 23, 59, 59, 999); shouldBeNaN(dateValue); }