我了解 ECMAScript 日期僅以紀元時間存盤時間值(自 1970 年 1 月 1 日 UTC 午夜以來的毫秒數)。
但是查看建構式的演算法Date(),我只看到引數值在哪里轉換為毫秒;我看不到毫秒值在哪里轉換為紀元時間。這一步發生在哪里?
uj5u.com熱心網友回復:
構造Date函式演算法呼叫MakeDay,它回傳引數值自紀元以來的天數。MakeDate然后通過簡單的乘法將該天數轉換為毫秒數。
MakeDay包含以下步驟:
- 找到一個有限的時間值
t,使得YearFromTime (t) 是ym并且MonthFromTime (t) 是mn并且DateFromTime (t) 是 1??;
這是一個相當模糊的定義,使用21.4.1.3 “年號”中定義的操作。在那里我們可以找到公式
DayFromYear(y) = ??(365 × (?(y) - 1970) floor((?(y) - 1969) / 4) - floor((?(y) - 1901) / 100) floor((? (y) - 1601) / 400))
結果顯示“第 0 天”是 1970 年的第一天。
但與其從這個公式推匯出來,我們可以只閱讀21.4.1.1 “時間值和時間范圍”:
時間值表示 1970 年 1 月 1 日 UTC 開始時的準確午夜時刻
0??。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/417193.html
標籤:
下一篇:C#字串到日期時間格式無法識別
