diff options
| author | Fuwn <[email protected]> | 2026-04-28 05:32:28 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-04-28 05:32:28 -0700 |
| commit | ae074b7dfeb2265fcaf2ac69692362b133f4069e (patch) | |
| tree | 18ba0d6057f10ad6919ffbcaa94088276113eb6a /src/lib/Media/Anime/Airing/time.ts | |
| parent | fix(airing): round residual hour and minute in AiringTime component (diff) | |
| download | due.moe-ae074b7dfeb2265fcaf2ac69692362b133f4069e.tar.xz due.moe-ae074b7dfeb2265fcaf2ac69692362b133f4069e.zip | |
refactor(airing): unify countdown formatter into shared helper
Diffstat (limited to 'src/lib/Media/Anime/Airing/time.ts')
| -rw-r--r-- | src/lib/Media/Anime/Airing/time.ts | 66 |
1 files changed, 2 insertions, 64 deletions
diff --git a/src/lib/Media/Anime/Airing/time.ts b/src/lib/Media/Anime/Airing/time.ts index 7f0e896a..b7547dd2 100644 --- a/src/lib/Media/Anime/Airing/time.ts +++ b/src/lib/Media/Anime/Airing/time.ts @@ -2,6 +2,7 @@ import type { Media } from "$lib/Data/AniList/media"; import type { MediaPrequel } from "$lib/Data/AniList/prequels"; import type { SubsPlease } from "$lib/Media/Anime/Airing/Subtitled/subsPlease"; import settings from "$stores/settings"; +import { formatCountdown } from "./format"; import { injectAiringTime } from "./Subtitled/match"; import { totalEpisodes } from "../episodes"; import { get } from "svelte/store"; @@ -22,9 +23,6 @@ export const airingTime = ( hour: "numeric", minute: "2-digit", }); - let timeFrame = ""; - let hours = null; - const shortenCountdown = get(settings).displayShortCountdown; if ( (anime as unknown as MediaPrequel).startDate && @@ -41,67 +39,7 @@ export const airingTime = ( ).toLocaleDateString()}</span>`; if (untilAiring !== undefined) { - let minutes = untilAiring / 60; - let few = true; - - if (minutes > 60) { - hours = minutes / 60; - - if (hours > 24) { - let weeks = Math.floor(hours / 24) / 7; - - few = false; - - if (weeks >= 1.5 && !forceDays) { - weeks = Math.round(weeks); - - timeFrame = `${weeks}${shortenCountdown ? "w" : " week"}${ - weeks === 1 || shortenCountdown ? "" : "s" - }`; - } else { - let days = Math.floor(hours / 24); - let residualHours = Math.round(hours - days * 24); - - if (residualHours === 24) { - days += 1; - residualHours = 0; - } - - timeFrame += `${days.toFixed(0)}${shortenCountdown ? "d" : " day"}${ - days === 1 || shortenCountdown ? "" : "s" - }`; - - if (residualHours > 0) - timeFrame += `${shortenCountdown ? "" : " "}${residualHours}${ - shortenCountdown ? "h" : " hour" - }${residualHours === 1 || shortenCountdown ? "" : "s"}`; - } - } else { - let displayHours = Math.floor(hours); - let residualMinutes = Math.round(minutes - displayHours * 60); - - if (residualMinutes === 60) { - displayHours += 1; - residualMinutes = 0; - } - - timeFrame += `${displayHours}${shortenCountdown ? "h" : " hour"}${ - displayHours === 1 || shortenCountdown ? "" : "s" - }`; - - if (residualMinutes > 0) - timeFrame += `${shortenCountdown ? "" : " "}${residualMinutes}${ - shortenCountdown ? "m" : " minute" - }${residualMinutes === 1 || shortenCountdown ? "" : "s"}`; - } - } else { - minutes = Math.round(minutes); - - timeFrame += `${minutes}${shortenCountdown ? "m" : " minute"}${ - minutes === 1 || shortenCountdown ? "" : "s" - }`; - } - + const { text: timeFrame, few } = formatCountdown(untilAiring, { forceDays }); const opacity = Math.max(50, 100 - (untilAiring / 60 / 60 / 24 / 7) * 50); const nextEpisode = anime.nextAiringEpisode?.nativeAiringAt && |