繁体   English   中英

什么是JavaScript日期范围

[英]What is the JavaScript 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 

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

来自文档

自UTC时间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日期对象支持的实际时间范围略小:相对于UTC时间1970年1月1日午夜测量的时间恰好为-100,000,000天到100,000,000天。 这给UTC时间1970年1月1日的任何一方提供了8,640,000,000,000,000毫秒的范围

所以,如果我这样说:

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

然后输出为:

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

但是d.setTime(8640000000000001);

不管用

您还可以查看此参考 ,其中给出了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);}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM