在Date()构造函数的ECMAScript规范中,时间值在哪里转换为epoch时间



我知道ECMAScript日期只存储epoch时间中的时间值(自1970年1月1日UTC午夜以来的毫秒数)。

但是查看Date()构造函数的算法,我只看到参数值转换为毫秒的位置;我看不出毫秒值在哪里转换为历元时间。这一步是在哪里发生的?

Date构造函数算法调用MakeDay,返回参数值自epoch以来的天数MakeDate然后通过简单的乘法将天数转换为毫秒数
MakeDay包含以下步骤:

  1. 找到一个有限时间值t,使得YearFromTime(t)为ymMonthFromTime(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表示。

最新更新