2013-11-22 73 views
1

Date()對象JavaScript的年份範圍什麼是JavaScript的日期範圍

我知道MS SQL年的日期範圍是什麼datetime數據類型是從1753年1月1日至9999-12-31

甚至在JavaScript一個月範圍爲0〜11的任何其他東西將是無效的日期

我是測試這一點,這裏是一些結果:

new Date(99999,1,1) ; //is valid 

new Date(1000000,1,1); // invalid 

,這意味着還有一年的範圍右 任何身體知道它是什麼,以及爲什麼這個確切範圍是多少?

+1

有趣的是,日期'新的日期(99999,11,31,9999999)'是有效的。它給了我Wed 10 16 101140 15:00:00 GMT-0400(EDT)。 –

回答

10

docs

時間是在ECMAScript中自1970年1月1日 UTC測量單位爲毫秒。在時間值閏秒被忽略。假設有 每天正好是86,400,000毫秒。 ECMAScript數值 可以表示從-9,007,199,254,740,992到 9,007,199,254,740,992的所有整數;這個範圍足以測量時間到 毫秒的精度,對於1970年1月1日UTC以前的或近期的大約 285,616年內的任何時刻。

通過的ECMAScript Date對象支持倍實際範圍是 略小:究竟-100,000,000天在1970年1月1日 UTC的開始相對測量午夜億天 。這給出了一個範圍的8,640,000,000,000,000毫秒 01月01日的兩側,1970年UTC

所以,如果我說喜歡:

var d = new Date(); 
d.setTime(8640000000000000); 
document.write(d); 

那麼這將輸出:

週五09月12日275760 20:00:00 GMT-0400(東部夏令時間)

d.setTime(8640000000000001);

將無法​​正常工作

0

您還可以檢查此reference這給例子,什麼是在Javascript的時間範圍。

以下是參考代碼: -

try{ 

module("ES5 ranges"); 

test("ES5 Epoch", function() { 

    // epoch 
    var expected = 0; 
    var actual = new Date(expected); 

    same(actual.getTime(), expected, ""); 
    same(actual.getUTCFullYear(), 1970, ""); 
    same(actual.getUTCMonth(), 0, ""); 
    same(actual.getUTCDate(), 1, ""); 
    same(actual.getUTCHours(), 0, ""); 
    same(actual.getUTCMinutes(), 0, ""); 
    same(actual.getUTCSeconds(), 0, ""); 
    same(actual.getUTCMilliseconds(), 0, ""); 
}); 

test("ES5 Min Date", function() { 

    // epoch - 1e8 days 
    var expected = -8.64e15; 
    var actual = new Date(expected); 

    same(actual.getTime(), expected, ""); 
    same(actual.getUTCFullYear(), -271821, ""); 
    same(actual.getUTCMonth(), 3, ""); 
    same(actual.getUTCDate(), 20, ""); 
    same(actual.getUTCHours(), 0, ""); 
    same(actual.getUTCMinutes(), 0, ""); 
    same(actual.getUTCSeconds(), 0, ""); 
    same(actual.getUTCMilliseconds(), 0, ""); 
}); 

test("ES5 Max Date", function() { 

    // epoch + 1e8 days 
    var expected = 8.64e15; 
    var actual = new Date(expected); 

    same(actual.getTime(), expected, ""); 
    same(actual.getUTCFullYear(), 275760, ""); 
    same(actual.getUTCMonth(), 8, ""); 
    same(actual.getUTCDate(), 13, ""); 
    same(actual.getUTCHours(), 0, ""); 
    same(actual.getUTCMinutes(), 0, ""); 
    same(actual.getUTCSeconds(), 0, ""); 
    same(actual.getUTCMilliseconds(), 0, ""); 
}); 

module("Overflow Date ranges"); 

test("Underflow Date", function() { 

    // epoch - 1e8 days - 1 ms 
    var expected = -8.64e15-1; 
    var actual = new Date(expected); 

    same(actual.getTime(), NaN, ""); 
    same(actual.getUTCFullYear(), NaN, ""); 
    same(actual.getUTCMonth(), NaN, ""); 
    same(actual.getUTCDate(), NaN, ""); 
    same(actual.getUTCHours(), NaN, ""); 
    same(actual.getUTCMinutes(), NaN, ""); 
    same(actual.getUTCSeconds(), NaN, ""); 
    same(actual.getUTCMilliseconds(), NaN, ""); 
}); 

test("Overflow Date", function() { 

    // epoch + 1e8 days + 1 ms 
    var expected = 8.64e15+1; 
    var actual = new Date(expected); 

    same(actual.getTime(), NaN, ""); 
    same(actual.getUTCFullYear(), NaN, ""); 
    same(actual.getUTCMonth(), NaN, ""); 
    same(actual.getUTCDate(), NaN, ""); 
    same(actual.getUTCHours(), NaN, ""); 
    same(actual.getUTCMinutes(), NaN, ""); 
    same(actual.getUTCSeconds(), NaN, ""); 
    same(actual.getUTCMilliseconds(), NaN, ""); 
}); 


}catch(ex){alert(ex);}