[英]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.