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"; export const airingTime = ( originalAnime: Media, subsPlease: SubsPlease | null, upcoming = false, forceDays = false, ) => { const anime = injectAiringTime(originalAnime, subsPlease); const airingAt = anime.nextAiringEpisode?.airingAt; const untilAiring = airingAt ? Math.round((airingAt - Date.now() / 1000) * 100) / 100 : undefined; const time = new Date(airingAt ? airingAt * 1000 : 0).toLocaleTimeString([], { hour12: !settings.get().display24HourTime, hour: "numeric", minute: "2-digit", }); if ( (anime as unknown as MediaPrequel).startDate && new Date( anime.startDate.year, (anime as unknown as MediaPrequel).startDate.month, (anime as unknown as MediaPrequel).startDate.day, ) < new Date() ) return `on ${new Date( anime.startDate.year, (anime as unknown as MediaPrequel).startDate.month, (anime as unknown as MediaPrequel).startDate.day, ).toLocaleDateString()}`; if (untilAiring !== undefined) { const { text: timeFrame, few } = formatCountdown(untilAiring, { forceDays }); const opacity = Math.max(50, 100 - (untilAiring / 60 / 60 / 24 / 7) * 50); const nextEpisode = anime.nextAiringEpisode?.nativeAiringAt && !upcoming && anime.nextAiringEpisode.nativeAiringAt < Date.now() / 1000 + 1 * 24 * 60 * 60 ? anime.nextAiringEpisode.episode - 1 : anime.nextAiringEpisode?.episode || 0; const dateString = new Date(airingAt ? airingAt * 1000 : 0).toLocaleDateString([], { weekday: "long", year: "numeric", month: "long", day: "numeric", }) + " " + time; if (upcoming) return `${nextEpisode}${totalEpisodes( anime, )} in ${timeFrame} ${ few && get(settings).displayCoverModeAnime ? "
" : "" }${few ? `(${time})` : ""}
`; else return `${nextEpisode} in ${ few && get(settings).displayCoverModeAnime ? "
" : "" }${few ? "" : ""}${timeFrame}${few ? "" : ""} ${few ? `(${time})` : ""}
`; } return ""; };