diff --git a/public/analyse-view.js b/public/analyse-view.js
index ef3e5b2..5b477d6 100644
--- a/public/analyse-view.js
+++ b/public/analyse-view.js
@@ -298,9 +298,16 @@ function contactItem(stats, cmp) {
return text
}
+// Der letzte Tag der Reihe ist heute und noch nicht zu Ende: er zaehlt beim Wochentag-Hinweis nicht mit
+function completedDays(stats) {
+ const series = Array.isArray(stats.series) ? stats.series : []
+ const last = series[series.length - 1]
+ return last && (!stats.to || last.day === stats.to) ? series.slice(0, -1) : series
+}
+
function dayItem(stats) {
if (!(Number(stats.totals.pv) >= 70)) return null
- const w = weekdayStats(stats.series, stats.firstDay || '')
+ const w = weekdayStats(completedDays(stats), stats.firstDay || '')
if (!w) return null
const parts = []
if (w.best) parts.push(`${w.best.name} ist im Schnitt dein stärkster Tag.`)
diff --git a/test/analyseInsights.test.js b/test/analyseInsights.test.js
index 30c3337..47b5c78 100644
--- a/test/analyseInsights.test.js
+++ b/test/analyseInsights.test.js
@@ -219,6 +219,32 @@ test('summarize: Wochentag und Spitzentag in einem Hinweis', () => {
assert.ok(!summarize(stats({ firstDay: '2026-09-30', series: days('2026-09-05', 30, spike) })).items.some((i) => i.icon === 'day'))
})
+test('summarize: der heutige, unvollständige Tag zählt beim Wochentag-Hinweis nicht mit', () => {
+ const isSat = (day) => new Date(day + 'T00:00:00Z').getUTCDay() === 6
+ const dayHtml = (s) => s.items.find((i) => i.icon === 'day')?.html
+ // Reihe 04.09.–03.10.2026, heute = Samstag 03.10. mit erst 5 Aufrufen; Samstage sonst 280, alle anderen Tage 200
+ const today = '2026-10-03'
+ const sat = (i, day) => (day === today ? 5 : isSat(day) ? 280 : 200)
+ const series = days('2026-09-04', 30, sat)
+ const base = { from: '2026-09-04', to: today, series }
+ // zählte der Tag mit, läge der Samstag-Schnitt (225) unter 1,2 × Gesamtschnitt (204) → kein Hinweis
+ assert.equal(weekdayStats(series, '').best, null)
+ // ohne den heutigen Tag: Samstag Ø 280 ≥ 1,2 × 211, stärkster Tag; Spitzentag nein (280 < 1,8 × 211)
+ assert.equal(dayHtml(summarize(stats(base))), 'Samstag ist im Schnitt dein stärkster Tag.')
+ // Spitzentag: Mi., 16.09. mit 365 (zählte heute mit, wäre 365 ≥ 1,8 × 199 ein Spitzentag; ohne heute 365 < 1,8 × 205,7)
+ const wed = days('2026-09-04', 30, (i, day) => (day === today ? 5 : day === '2026-09-16' ? 365 : 200))
+ assert.ok(weekdayStats(wed, '').peak)
+ assert.equal(dayHtml(summarize(stats({ ...base, series: wed }))), undefined)
+ // fehlt `to`, entfällt der letzte Tag trotzdem
+ assert.equal(dayHtml(summarize(stats({ ...base, to: undefined }))), 'Samstag ist im Schnitt dein stärkster Tag.')
+ // endet die Reihe nicht auf `to`, ist der letzte Tag ein abgeschlossener Tag und zählt mit
+ assert.equal(dayHtml(summarize(stats({ ...base, to: '2026-10-04' }))), undefined)
+ // 7-Tage-Ansicht: nur 6 abgeschlossene Tage → kein Wochentag-Hinweis, auch bei deutlichem Muster
+ const week = days('2026-09-28', 7, (i, day) => (isSat(day) ? 500 : 100))
+ assert.equal(dayHtml(summarize(stats({ range: 7, from: '2026-09-28', to: '2026-10-04', series: week }))), undefined)
+ assert.ok(weekdayStats(week, '')) // mit allen 7 Tagen wäre es ein Ergebnis gewesen
+})
+
test('summarize: Pfade und Hosts werden maskiert', () => {
const s = summarize(stats({ pages: [{ key: '/
', count: 900 }], refs: [{ key: 'a"b.de', count: 900 }] }))
assert.ok(!JSON.stringify(s).includes('![]()