这跟javascript日期一样低:
var myDate = new Date(0, 0, 1);
myDate.setFullYear("-271800");
alert(myDate);
任何低于公元前-271,800的东西都会引发无效的日期错误。我们能回到一百万年了吗?还是十亿?日期对象是否允许您在过去或将来无限描述任何日期?我怎么能这样做?
答案 0 :(得分:10)
代表一百万年前的特定日期让我觉得毫无意义。朱利安日历?星期几应该遵守Babylonian系统吗?
为此创建自己的类型,决定实际需要代表什么。
---更新:这已被接受,因此我将添加一些更具体的位。 ---
如另一个答案所述,根据EcmaScript spec, pg 164 of the fifth edition(链接是.pdf。)
自1970年1月1日起,时间以ECMAScript为单位,以毫秒为单位 世界标准时间。在时间值中,忽略闰秒。假设是 每天正好有86,400,000毫秒。 ECMAScript编号 值可以表示从-9,007,199,254,740,991到的所有整数 9,007,199,254,740,991;这个范围足以衡量时间 毫米级精度,适用于任何瞬间 从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日的任何一方。
但是,这是理论日期。它忽略了一些现实。一百万年前的天数较短(12秒),因此一些JavaScript数学将是不准确的。已经用不同的系统确定了星期几。月份的定义不同。总而言之,决定你真正需要代表什么。
答案 1 :(得分:3)
ECMAScript标准要求Date对象能够在1970年1月1日之前或之后的1亿天内以毫秒精度表示任何日期和时间。这是正负273,785年的范围。为了表示此范围之外的日期,您需要实现自己的日期对象,该对象不能以毫秒分辨率运行。
答案 2 :(得分:3)
您应该为此构建自己的DateTime。它的复杂程度取决于你想要达到的目标......如果你只想表示年份,那么它只是一个简单的数字......如果你想说明什么日期是公元前1 200 000年的最后一个星期日,那就更多了复杂...但请记住,那一年的星期日不存在:)...我们现在使用的公历是在公元1582年,朱利安历法公元前45年(我不确定之前是什么)。我不认为即使javascript DateTime考虑到这一点,所以将它设置为公元前271800年是没有意义的。
答案 3 :(得分:1)
根据https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date:
自从午夜01起,JavaScript日期以毫秒为单位 1970年1月,UTC。一天持有86,400,000毫秒。 JavaScript 日期对象范围是-100,000,000天到100,000,000天相对 1970年1月1日,UTC。
JavaScript Date对象提供跨平台的统一行为。
资源是有限的,开发人员必须在任何给定数据类型的存储,性能和范围之间进行折衷。恕我直言,日期的ecmascript范围对于任何实际问题都足够大。