什么是JavaScript日期范围

时间:2013-11-22 18:30:45

标签: javascript jquery date range

Date()对象

中的JavaScript年份范围是多少?

我知道在MS SQL年日期范围内datetime数据类型是从1753-01-01到9999-12-31

即使在JavaScript月份范围是0到11,任何其他东西都将是无效日期

我正在测试这个,这里有一些结果:

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

但是

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

这意味着有一年的范围 任何人都知道它是什么以及为什么这个确切的范围?

2 个答案:

答案 0 :(得分:12)

来自docs

  

自1970年1月1日起,时间以ECMAScript为单位,以毫秒为单位   世界标准时间。在时间值中,忽略闰秒。假设那里   每天正好是86,400,000毫秒。 ECMAScript数值   可以表示从-9,007,199,254,740,992到的所有整数   9,007,199,254,740,992;这个范围足以衡量时间   毫米级精度,适用于任何瞬间   从UTC时间1970年1月1日起,向前或向后285,616年。

     

ECMAScript Date对象支持的实际时间范围是   略小:正好是-100,000,000天到100,000,000天   相对于1970年1月1日开始的午夜测量   世界标准时间。这给出了8,640,000,000,000,000毫秒的范围   1970年1月1日,UTC的任何一方

所以,如果我这样说:

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

然后输出为:

周五9月12日275760 20:00:00 GMT-0400(东部夏令时)

但是d.setTime(8640000000000001);

不起作用

答案 1 :(得分: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);}