fix(deadline-banner): count calendar days, not 24h windows
daysLeft used Math.ceil(ms/24h) which counted partial 24h windows: 30h before a midnight event tomorrow showed "Noch 2 Tage" instead of "Morgen". Compare midnight-to-midnight day-keys instead, same approach as CalendarBlock relativeDays(). Also adds data-block="DeadlineBanner" identifier. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -61,11 +61,20 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/** Kalendertage zwischen heute und Ziel — über Mitternacht-zu-
|
||||||
|
* Mitternacht-Diff, nicht roh per ms. Sonst zählt z. B. 30 h vor
|
||||||
|
* Termin als „2 Tage" obwohl der Termin morgen ist. */
|
||||||
const daysLeft = $derived.by(() => {
|
const daysLeft = $derived.by(() => {
|
||||||
if (!dateObj) return null;
|
if (!dateObj) return null;
|
||||||
const ms = dateObj.getTime() - Date.now();
|
const today = new Date();
|
||||||
if (ms < 0) return null;
|
today.setHours(0, 0, 0, 0);
|
||||||
return Math.ceil(ms / (1000 * 60 * 60 * 24));
|
const target = new Date(dateObj);
|
||||||
|
target.setHours(0, 0, 0, 0);
|
||||||
|
const diffDays = Math.round(
|
||||||
|
(target.getTime() - today.getTime()) / (1000 * 60 * 60 * 24),
|
||||||
|
);
|
||||||
|
if (diffDays < 0) return null;
|
||||||
|
return diffDays;
|
||||||
});
|
});
|
||||||
|
|
||||||
const countdownStr = $derived.by(() => {
|
const countdownStr = $derived.by(() => {
|
||||||
@@ -103,7 +112,7 @@
|
|||||||
{#if hasContent && !dismissed}
|
{#if hasContent && !dismissed}
|
||||||
<div
|
<div
|
||||||
class="deadline-banner {layoutClasses}"
|
class="deadline-banner {layoutClasses}"
|
||||||
data-block-type="deadline_banner"
|
data-block="DeadlineBanner" data-block-type="deadline_banner"
|
||||||
data-block-slug={block._slug}
|
data-block-slug={block._slug}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
|||||||
Reference in New Issue
Block a user