Date()
对象
我知道在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
这意味着有一年的范围 任何人都知道它是什么以及为什么这个确切的范围?
答案 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);}