Minimum ve maksimum tarih


129

Bir Javascript Datenesnesi için izin verilen minimum ve maksimum tarihin hangisi olduğunu merak ediyordum . Minimum tarihin MÖ 200000 gibi bir şey olduğunu buldum, ancak bu konuda herhangi bir referans alamadım.

Cevabı kimse biliyor mu? Umarım tarayıcıya bağlı değildir.

"Dönem zamanı" (= 1970-01-01 00:00:00 UTC + 00 arası milisaniye) en iyisidir.


Bir kopyala / yapıştır yanıtı için: stackoverflow.com/questions/27093130/…
Kieveli

Yanıtlar:


178

Gönderen spec, §15.9.1.1 :

Bir Date nesnesi, bir milisaniye içinde belirli bir anı gösteren bir Sayı içerir. Böyle bir Sayıya zaman değeri denir. Bir zaman değeri, Date nesnesinin belirli bir zaman anını temsil etmediğini gösteren NaN olabilir.

Zaman, ECMAScript'te 01 Ocak 1970 UTC'den bu yana milisaniye cinsinden ölçülür. Zaman değerlerinde artık saniyeler dikkate alınmaz. Günde tam olarak 86.400.000 milisaniye olduğu varsayılmaktadır. ECMAScript Numarası değerleri, –9,007,199,254,740,992 ile 9,007,199,254,740,992 arasındaki tüm tam sayıları temsil edebilir; bu aralık, 01 Ocak 1970 UTC'den itibaren yaklaşık 285.616 yıl içinde ileri veya geri olan herhangi bir an için zamanları milisaniye hassasiyetine kadar ölçmek için yeterlidir.

ECMAScript Date nesneleri tarafından desteklenen gerçek zaman aralığı biraz daha küçüktür: 01 Ocak 1970 UTC başlangıcındaki gece yarısına göre ölçülen tam olarak –100.000.000 gün ila 100.000.000 gün. Bu, 01 Ocak 1970 UTC'nin her iki tarafına da 8.640.000.000.000.000 milisaniye aralığı verir.

01 Ocak 1970 UTC'nin başındaki tam gece yarısı anı +0 değeriyle temsil edilir.

Üçüncü paragraf en alakalı olanıdır. Bu paragrafa dayanarak, spesifikasyon başına en erken tarihi new Date(-8640000000000000)MÖ 20 Nisan 271,821 Salı (MÖ = Ortak Dönemden Önce , örneğin -271,821 yılı) alabiliriz.



1
Bu yüzden -9223372036854775808L ile çalışmıyor ... Bugüne kadar değiştirdikten sonra bile, resever pozitif aralık dışı değeri döndürüyor.
deadManN

1
İnsanların neyden şikayet ettiğini bilmiyorum, bu benim için iyi çalışıyor. BTW Bunun ters yönde işleyişinin herhangi bir yolu olup olmadığını merak ediyorum (yani BCE tarihini girmek ve çağ saniyelerini negatif int olarak almak)?
Mark Seagoe

1
@MarkSeagoe - Date.UTC(-271821, 3, 20)döndürür -8640000000000000. :-)
TJ Crowder

yeni Tarih ('275760-9-13 05:30:00')
AshTyson

52

TJ'nin cevabını artırmak için, minimum / maksimum değerleri aşmak bir Geçersiz Tarih oluşturur.

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

Gördüğünüz gibi 01/01/1970 0 değerini döndürüyor, bu da tarihin mümkün olan en düşük tarih olduğu anlamına geliyor.

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
Cevabınızın amacı nedir? Orijinal soruya nasıl yanıt veriyor?
MaxArt

1/1/1970 mümkün olan en düşük tarih değil. 1/1/1970 tarihinden önce bir tarih almak için negatif bir sayı geçebilirsiniz.
inejwstine
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.