UNPKG

retail-calendar

Version:
33 lines (32 loc) 1.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var date_utils_1 = require("./date_utils"); var LastDayNearestEOMStrategy = /** @class */ (function () { function LastDayNearestEOMStrategy() { } LastDayNearestEOMStrategy.prototype.getLastDayForGregorianLastDay = function (lastDayOfGregorianYear, lastDayOfIsoWeek, _retailCalendarYear) { var mutableLastDay = new Date(lastDayOfGregorianYear); // Generate 3 candidates which has the same day of week. // Current week, last week, next week var currentWeekCandidate = date_utils_1.setIsoWeekDay(mutableLastDay, lastDayOfIsoWeek); var lastWeekCandidate = date_utils_1.setIsoWeekDay(date_utils_1.addWeeksToDate(mutableLastDay, -1), lastDayOfIsoWeek); var nextWeekCandidate = date_utils_1.setIsoWeekDay(date_utils_1.addWeeksToDate(mutableLastDay, 1), lastDayOfIsoWeek); // Calculate absolute day differences from each candidate to EOM var currentWeekDiff = Math.abs(date_utils_1.getDayDifference(mutableLastDay, currentWeekCandidate)); var lastWeekDiff = Math.abs(date_utils_1.getDayDifference(mutableLastDay, lastWeekCandidate)); var nextWeekDiff = Math.abs(date_utils_1.getDayDifference(mutableLastDay, nextWeekCandidate)); // Find nearest difference var minDiff = Math.min(currentWeekDiff, lastWeekDiff, nextWeekDiff); if (minDiff === nextWeekDiff) { return nextWeekCandidate; } else if (minDiff === lastWeekDiff) { return lastWeekCandidate; } else { return currentWeekCandidate; } }; return LastDayNearestEOMStrategy; }()); exports.LastDayNearestEOMStrategy = LastDayNearestEOMStrategy;