blob: 20e4f2e4de7f72c0ce7fabfddabf984dbc783733 [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001'use strict';
2
3var GetIntrinsic = require('get-intrinsic');
4
5var $EvalError = GetIntrinsic('%EvalError%');
6
7var DayWithinYear = require('./DayWithinYear');
8var InLeapYear = require('./InLeapYear');
9var MonthFromTime = require('./MonthFromTime');
10
11// https://262.ecma-international.org/5.1/#sec-15.9.1.5
12
13module.exports = function DateFromTime(t) {
14 var m = MonthFromTime(t);
15 var d = DayWithinYear(t);
16 if (m === 0) {
17 return d + 1;
18 }
19 if (m === 1) {
20 return d - 30;
21 }
22 var leap = InLeapYear(t);
23 if (m === 2) {
24 return d - 58 - leap;
25 }
26 if (m === 3) {
27 return d - 89 - leap;
28 }
29 if (m === 4) {
30 return d - 119 - leap;
31 }
32 if (m === 5) {
33 return d - 150 - leap;
34 }
35 if (m === 6) {
36 return d - 180 - leap;
37 }
38 if (m === 7) {
39 return d - 211 - leap;
40 }
41 if (m === 8) {
42 return d - 242 - leap;
43 }
44 if (m === 9) {
45 return d - 272 - leap;
46 }
47 if (m === 10) {
48 return d - 303 - leap;
49 }
50 if (m === 11) {
51 return d - 333 - leap;
52 }
53 throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
54};