我知道ECMAScript日期只存储epoch时间中的时间值(自1970年1月1日UTC午夜以来的毫秒数)。
但是查看Date()
构造函数的算法,我只看到参数值转换为毫秒的位置;我看不出毫秒值在哪里转换为历元时间。这一步是在哪里发生的?
Date
构造函数算法调用MakeDay,返回参数值自epoch以来的天数MakeDate然后通过简单的乘法将天数转换为毫秒数
MakeDay包含以下步骤:
- 找到一个有限时间值
t
,使得YearFromTime(t
)为ym
,MonthFromTime(t
)为mn
,DateFromTime(t
)为1
这是一个相当模糊的定义,使用了21.4.1.3">年份";。在那里我们可以找到公式
DayFromYear(y)=(365×(ℝ(y) -1970)+地板((ℝ(y) -1969)/4)-地板((ℝ(y) -1901)/100)+地板((ℝ(y) -1601)/400))
这就产生了"第0天";1970年的第一天。
但是,与其从这个公式中得出,我们可以只读21.4.1.1">时间值和时间范围":
1970年1月1日UTC开始时午夜的确切时刻由时间值
+0
表示。