38 lines
1.0 KiB
JavaScript
38 lines
1.0 KiB
JavaScript
const normalizeDate = (input) =>
|
|
typeof input?.toDate === 'function' ? input.toDate() : new Date(input)
|
|
|
|
const buildMonthKey = (timestamp) => {
|
|
const date = normalizeDate(timestamp)
|
|
const year = date.getUTCFullYear()
|
|
const month = String(date.getUTCMonth() + 1).padStart(2, '0')
|
|
return `${year}-${month}`
|
|
}
|
|
|
|
const buildPreviousMonthContext = (referenceDate) => {
|
|
const current = referenceDate ? new Date(referenceDate) : new Date()
|
|
current.setUTCHours(0, 0, 0, 0)
|
|
current.setUTCDate(1)
|
|
|
|
const target = new Date(current)
|
|
target.setUTCMonth(target.getUTCMonth() - 1)
|
|
|
|
const year = target.getUTCFullYear()
|
|
const monthIndex = target.getUTCMonth()
|
|
const rangeStart = new Date(Date.UTC(year, monthIndex, 1, 0, 0, 0, 0))
|
|
const rangeEnd = new Date(Date.UTC(year, monthIndex + 1, 0, 23, 59, 59, 999))
|
|
const monthKey = buildMonthKey(rangeStart)
|
|
|
|
return {
|
|
year,
|
|
month: monthIndex + 1,
|
|
monthKey,
|
|
rangeStart,
|
|
rangeEnd,
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
buildMonthKey,
|
|
buildPreviousMonthContext,
|
|
}
|