retail-calendar
Version:
A configurable retail calendar
37 lines (36 loc) • 1.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var date_utils_1 = require("./date_utils");
var CustomLeapYearStrategy = /** @class */ (function () {
function CustomLeapYearStrategy(leapYear, leapYearEndDate, leapYearFrequency) {
this.leapYear = leapYear;
this.leapYearEndDate = leapYearEndDate;
this.leapYearFrequency = leapYearFrequency;
}
CustomLeapYearStrategy.prototype.getLastDayForGregorianLastDay = function (lastDayOfGregorianYear, isoLastDayOfWeek, retailCalendarYear) {
var startCalendarYear = this.leapYear;
var startYearEndDate = this.leapYearEndDate;
var yearDifference = retailCalendarYear - startCalendarYear;
var yearEndDate = date_utils_1.createDateFromYYYYMMDD(this.leapYearEndDate);
if (yearDifference > 0) {
// start at the startCalendarYear + 1, because we already have the end date for the startCalendarYear
for (var i = startCalendarYear + 1; i <= retailCalendarYear; i += 1) {
var isLeapYear = Math.abs(i - startCalendarYear) % this.leapYearFrequency === 0;
var numberOfWeeks = isLeapYear ? 53 : 52;
yearEndDate = date_utils_1.addWeeksToDate(yearEndDate, numberOfWeeks);
}
return yearEndDate;
}
else if (yearDifference < 0) {
for (var i = startCalendarYear; i > retailCalendarYear; i -= 1) {
var isLeapYear = Math.abs(i - startCalendarYear) % this.leapYearFrequency === 0;
var numberOfWeeks = isLeapYear ? 53 : 52;
yearEndDate = date_utils_1.addWeeksToDate(yearEndDate, -numberOfWeeks);
}
return yearEndDate;
}
return yearEndDate;
};
return CustomLeapYearStrategy;
}());
exports.CustomLeapYearStrategy = CustomLeapYearStrategy;