Fix weekly recurring events showing wrong date in edit dialog due to confusion about week start day.

This commit is contained in:
Leo Vasanko 2025-08-27 07:26:04 -06:00
parent d9352a9fb3
commit ecae48fd85

View File

@ -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) {