Entiendo que una fecha de ECMAScript solo almacena un valor de tiempo en tiempo de época (la cantidad de milisegundos desde la medianoche del 1 de enero de 1970 UTC).
Pero mirando el algoritmo para el constructor Date() , solo veo dónde los valores de los argumentos se convierten a milisegundos; No veo dónde se convierte el valor de milisegundos en tiempo de época. ¿Dónde ocurre ese paso?
El algoritmo constructor de Date llama a MakeDay , que devuelve el número de días desde la época para los valores del argumento. MakeDate luego convierte ese número de días al número de milisegundos mediante una simple multiplicación.
MakeDay contiene el siguiente paso:
- Encuentre un valor de tiempo finito
ttal que YearFromTime (t) seaymy MonthFromTime (t) seamny DateFromTime (t) sea 1𝔽;
Esta es una definición bastante oscura, utilizando las operaciones definidas en 21.4.1.3 " Número de año " . Allí podemos encontrar la fórmula.
DayFromYear(y) = 𝔽(365 × (ℝ(y) - 1970) + piso((ℝ(y) - 1969) / 4) - piso((ℝ(y) - 1901) / 100) + piso((ℝ (y) - 1601) / 400))
Esto resulta tener el "día 0" como el primer día de 1970.
Pero en lugar de derivar eso de esta fórmula, podemos simplemente leer 21.4.1.1 " Valores de tiempo y rango de tiempo " :
El momento exacto de la medianoche a principios del 1 de enero de 1970 UTC está representado por el valor de tiempo
+0𝔽.