你能创建低于公元前271800的日期吗?像恐龙时间?

时间:2012-01-14 05:09:23

标签: javascript object date datepicker

这跟javascript日期一样低:

var myDate = new Date(0, 0, 1);
myDate.setFullYear("-271800");
alert(myDate);

任何低于公元前-271,800的东西都会引发无效的日期错误。我们能回到一百万年了吗?还是十亿?日期对象是否允许您在过去或将来无限描述任何日期?我怎么能这样做?

4 个答案:

答案 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范围对于任何实际问题都足够大。