blob: 13f568633a34a03b7b746ae36ac48f8916eb9838 [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001'use strict';
2
3var GetIntrinsic = require('get-intrinsic');
4
5var $DateUTC = GetIntrinsic('%Date.UTC%');
6
7var $isFinite = require('../helpers/isFinite');
8
9var DateFromTime = require('./DateFromTime');
10var Day = require('./Day');
11var floor = require('./floor');
12var modulo = require('./modulo');
13var MonthFromTime = require('./MonthFromTime');
14var ToInteger = require('./ToInteger');
15var YearFromTime = require('./YearFromTime');
16
17// https://262.ecma-international.org/5.1/#sec-15.9.1.12
18
19module.exports = function MakeDay(year, month, date) {
20 if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
21 return NaN;
22 }
23 var y = ToInteger(year);
24 var m = ToInteger(month);
25 var dt = ToInteger(date);
26 var ym = y + floor(m / 12);
27 var mn = modulo(m, 12);
28 var t = $DateUTC(ym, mn, 1);
29 if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
30 return NaN;
31 }
32 return Day(t) + dt - 1;
33};