add billing
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
export function billingPeriod(billingDay: number, date: Date) {
|
||||
// Determine the anchor month and year
|
||||
let anchorMonth, anchorYear
|
||||
|
||||
if (date.getDate() >= billingDay) {
|
||||
anchorMonth = date.getMonth() + 1 // JavaScript months are 0-11
|
||||
anchorYear = date.getFullYear()
|
||||
} else {
|
||||
// Move to previous month
|
||||
if (date.getMonth() === 0) {
|
||||
// January
|
||||
anchorMonth = 12
|
||||
anchorYear = date.getFullYear() - 1
|
||||
} else {
|
||||
anchorMonth = date.getMonth() // No +1 because we're going backwards
|
||||
anchorYear = date.getFullYear()
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate start date
|
||||
const lastDayOfMonth = new Date(anchorYear, anchorMonth, 0).getDate()
|
||||
const startDay = Math.min(billingDay, lastDayOfMonth)
|
||||
const startDate = new Date(anchorYear, anchorMonth - 1, startDay) // -1 because JS months are 0-based
|
||||
|
||||
// Calculate next month and year
|
||||
let nextMonth, nextYear
|
||||
if (anchorMonth === 12) {
|
||||
nextMonth = 1
|
||||
nextYear = anchorYear + 1
|
||||
} else {
|
||||
nextMonth = anchorMonth + 1
|
||||
nextYear = anchorYear
|
||||
}
|
||||
|
||||
// Calculate end date
|
||||
const nextLastDayOfMonth = new Date(nextYear, nextMonth, 0).getDate()
|
||||
const endDay = Math.min(billingDay, nextLastDayOfMonth)
|
||||
const endDate = new Date(nextYear, nextMonth - 1, endDay)
|
||||
endDate.setDate(endDate.getDate() - 1) // Subtract one day
|
||||
|
||||
return [startDate, endDate]
|
||||
}
|
||||
|
||||
export function formatDate(date = new Date()) {
|
||||
const year = date.getFullYear()
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0') // e.g: January = 01
|
||||
const day = String(date.getDate()).padStart(2, '0')
|
||||
|
||||
return `${year}-${month}-${day}`
|
||||
}
|
||||
Reference in New Issue
Block a user