@oxog/kairos
Version:
Revolutionary zero-dependency JavaScript date/time library with modular architecture and dynamic holiday system
84 lines • 3.77 kB
JavaScript
const fiscalPlugin = {
name: 'fiscal',
install(kairos) {
kairos.extend({
fiscalYear(config) {
const startMonth = config?.startMonth || 1;
const currentMonth = this.month();
const currentYear = this.year();
if (currentMonth >= startMonth) {
return currentYear;
}
else {
return currentYear - 1;
}
},
fiscalQuarter(config) {
const startMonth = config?.startMonth || 1;
const currentMonth = this.month();
let adjustedMonth = currentMonth - startMonth + 1;
if (adjustedMonth <= 0) {
adjustedMonth += 12;
}
return Math.ceil(adjustedMonth / 3);
},
fiscalMonth(config) {
const startMonth = config?.startMonth || 1;
const currentMonth = this.month();
let adjustedMonth = currentMonth - startMonth + 1;
if (adjustedMonth <= 0) {
adjustedMonth += 12;
}
return adjustedMonth;
},
startOfFiscalYear(config) {
const startMonth = config?.startMonth || 1;
const fiscalYear = this.fiscalYear(config);
return kairos().year(fiscalYear).month(startMonth).date(1).startOf('day');
},
endOfFiscalYear(config) {
const startMonth = config?.startMonth || 1;
const fiscalYear = this.fiscalYear(config);
const endYear = startMonth === 1 ? fiscalYear : fiscalYear + 1;
const endMonth = startMonth === 1 ? 12 : startMonth - 1;
return kairos().year(endYear).month(endMonth).endOf('month');
},
startOfFiscalQuarter(config) {
const startMonth = config?.startMonth || 1;
const quarter = this.fiscalQuarter(config);
const fiscalYear = this.fiscalYear(config);
const quarterStartMonth = startMonth + (quarter - 1) * 3;
const year = quarterStartMonth > 12 ? fiscalYear + 1 : fiscalYear;
const month = quarterStartMonth > 12 ? quarterStartMonth - 12 : quarterStartMonth;
return kairos().year(year).month(month).date(1).startOf('day');
},
endOfFiscalQuarter(config) {
const startMonth = config?.startMonth || 1;
const quarter = this.fiscalQuarter(config);
const fiscalYear = this.fiscalYear(config);
const quarterEndMonth = startMonth + quarter * 3 - 1;
const year = quarterEndMonth > 12 ? fiscalYear + 1 : fiscalYear;
const month = quarterEndMonth > 12 ? quarterEndMonth - 12 : quarterEndMonth;
return kairos().year(year).month(month).endOf('month');
},
});
kairos.addStatic({
fiscalYear(date, config) {
return kairos(date).fiscalYear(config);
},
fiscalQuarter(date, config) {
return kairos(date).fiscalQuarter(config);
},
createFiscalCalendar(config) {
return {
startMonth: config?.startMonth || 1,
getYear: (date) => kairos(date).fiscalYear(config),
getQuarter: (date) => kairos(date).fiscalQuarter(config),
getMonth: (date) => kairos(date).fiscalMonth(config),
};
},
});
},
};
export default fiscalPlugin;
//# sourceMappingURL=fiscal.js.map