Fix weekly recurring events showing wrong date in edit dialog due to confusion about week start day.
This commit is contained in:
parent
d9352a9fb3
commit
ecae48fd85
@ -91,25 +91,27 @@ function getDateWeekly(event, n, timeZone = DEFAULT_TZ) {
|
||||
let occ = n
|
||||
if (!baseCountsAsPattern) occ -= 1
|
||||
if (occ < 0) return null
|
||||
const patternDays = []
|
||||
for (let d = 0; d < 7; d++) if (pattern[d]) patternDays.push(d)
|
||||
const firstWeekDates = []
|
||||
for (const d of patternDays) {
|
||||
if (d < baseDow) continue
|
||||
const date = dateFns.addDays(baseWeekMonday, d)
|
||||
if (date < baseStart) continue
|
||||
firstWeekDates.push(date)
|
||||
// Build Monday-based offsets (0=Mon..6=Sun) for all active pattern days
|
||||
const offsets = pattern
|
||||
.reduce((acc, active, i) => (active ? [...acc, (i + 6) % 7] : acc), [])
|
||||
.sort((a, b) => a - b)
|
||||
const dates = []
|
||||
const baseOffset = (baseDow + 6) % 7
|
||||
for (const off of offsets) {
|
||||
if (off < baseOffset) continue
|
||||
const d = dateFns.addDays(baseWeekMonday, off)
|
||||
if (d < baseStart) continue
|
||||
dates.push(d)
|
||||
}
|
||||
const F = firstWeekDates.length
|
||||
if (occ < F) return toLocalString(firstWeekDates[occ], timeZone)
|
||||
const F = dates.length
|
||||
if (occ < F) return toLocalString(dates[occ], timeZone)
|
||||
const remaining = occ - F
|
||||
const P = patternDays.length
|
||||
const P = offsets.length
|
||||
if (P === 0) return null
|
||||
const k = Math.floor(remaining / P) + 1
|
||||
const indexInWeek = remaining % P
|
||||
const dow = patternDays[indexInWeek]
|
||||
const occurrenceDate = dateFns.addDays(baseWeekMonday, k * interval * 7 + dow)
|
||||
return toLocalString(occurrenceDate, timeZone)
|
||||
const date = dateFns.addDays(baseWeekMonday, k * interval * 7 + offsets[indexInWeek])
|
||||
return toLocalString(date, timeZone)
|
||||
}
|
||||
|
||||
function getDateMonthly(event, n, timeZone = DEFAULT_TZ) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user