Мінімальна і максимальна дата


128

Мені було цікаво, який мінімальний та максимальний термін дозволений для Dateоб’єкта Javascript . Я виявив, що мінімальна дата - це щось на зразок 200000 р. До н.

Хтось знає відповідь? Я просто сподіваюся, що це не залежить від браузера.

Відповідь у "епоху" (= мілісекунди з 1970-01-01 00:00:00 UTC + 00) була б найкращою.


Для копіювання / вставки відповідь: stackoverflow.com/questions/27093130 / ...
Kieveli

Відповіді:


177

З специфікації, § 15.9.1.1 :

Об'єкт "Дата" містить число, яке вказує на певний момент у межах мілісекунди. Таке число називається значенням часу. Значення часу також може бути NaN, що вказує, що об'єкт Date не представляє конкретний момент часу.

Час вимірюється в ECMAScript у мілісекундах з 01 січня 1970 року за UTC. У часових значеннях стрибкові секунди ігноруються. Передбачається, що в день відбувається рівно 86 400 000 мілісекунд. Значення числа ECMAScript можуть представляти всі цілі числа від –9,007,199,254,740,992 до 9,007,199,254,740,992; цього діапазону достатньо для вимірювання часу до мілісекундної точності за будь-який момент, який знаходиться приблизно за 285 616 років, вперед або назад, з 01 січня 1970 року за UTC.

Фактичний діапазон разів, що підтримується об'єктами ECMAScript Date, трохи менший: рівно –100 000 000 днів до 100 000 000 днів, виміряні відносно півночі на початок 01 січня 1970 року UTC. Це дає діапазон від 8 640 000 000 000 000 мілісекунд в обидві сторони з 01 січня 1970 року за UTC.

Точний момент опівночі на початок 01 січня 1970 р. UTC представлений значенням +0.

Третій параграф є найбільш актуальним. Виходячи з цього абзацу, ми можемо отримати точну ранню дату за специфікацією new Date(-8640000000000000), яка є вівторок, 20 квітня, 271 821 рр. До н.е. (до н.е. = до загальної епохи , наприклад, рік -271,821).


1
Це надихнуло поле isMin isMax, як у .net ... gist.github.com/QueueHammer/cb9bf736b81029d65485fb30ad01918d
QueueHammer

1
Тож тому він не працює з -9223372036854775808L ... Навіть після того, як я його зміню на сьогоднішній день, ресівер повертає позитивне значення діапазону.
мертвийManN

1
Я не знаю, на що скаржаться люди, це добре працює для мене. BTW Цікаво, чи є спосіб, що це працює в зворотному порядку (тобто введення дати BCE і отримання епохальних секунд як негативний int)?
Марк Seagoe

1
@MarkSeagoe - Date.UTC(-271821, 3, 20)повертається -8640000000000000. :-)
TJ Crowder

нова дата ('275760-9-13 05:30:00')
AshTyson

52

Щоб збільшити відповідь TJ, перевищення значень min / max створює недійсну дату.

let maxDate = new Date(8640000000000000);
let minDate = new Date(-8640000000000000);

console.log(new Date(maxDate.getTime()).toString());
console.log(new Date(maxDate.getTime() - 1).toString());
console.log(new Date(maxDate.getTime() + 1).toString()); // Invalid Date

console.log(new Date(minDate.getTime()).toString());
console.log(new Date(minDate.getTime() + 1).toString());
console.log(new Date(minDate.getTime() - 1).toString()); // Invalid Date


-8

Як бачите, 01.01.1970 повертає 0, а це означає, що це найменша можлива дата.

new Date('1970-01-01Z00:00:00:000') //returns Thu Jan 01 1970 01:00:00 GMT+0100 (Central European Standard Time)
new Date('1970-01-01Z00:00:00:000').getTime() //returns 0
new Date('1970-01-01Z00:00:00:001').getTime() //returns 1

9
У чому сенс вашої відповіді? Як він відповідає на початкове запитання?
MaxArt

1/1/1970 - не найменша можлива дата. Ви можете пройти негативне число, щоб отримати дату до 1.01.1970.
inejwstine
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.