import type { Media } from '$lib/AniList/media'; import type { MediaPrequel } from '$lib/AniList/prequels'; import type { SubsPlease } from '$lib/Media/Anime/Airing/Subtitled/subsPlease'; import settings from '../../../../stores/settings'; import { injectAiringTime } from './Subtitled/match'; import { totalEpisodes } from '../episodes'; export const airingTime = ( originalAnime: Media, subsPlease: SubsPlease | null, upcoming = 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' }); let timeFrame; let hours = null; 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) { let minutes = untilAiring / 60; let few = true; if (minutes > 60) { hours = minutes / 60; if (hours >= 24) { // let weeks = Math.floor(Math.floor(hours / 24) / 7); few = false; // if (weeks >= 1) { // weeks = Math.round(weeks); // timeFrame = `${weeks} week${weeks === 1 ? '' : 's'}`; // } else { const days = Math.round(Math.floor(hours / 24)); timeFrame = `${days.toFixed(0)} day${days === 1 ? '' : 's'}`; // } } else timeFrame = `${hours.toFixed(1)} hour${hours === 1 ? '' : 's'}`; } else { minutes = Math.round(minutes); timeFrame = `${minutes} minute${minutes === 1 ? '' : 's'}`; } const opacity = Math.max(50, 100 - (untilAiring / 60 / 60 / 24 / 7) * 50); if (upcoming) return `${anime.nextAiringEpisode?.episode}${totalEpisodes( anime )} in ${timeFrame} ${few ? `(${time})` : ''}`; else return `${anime.nextAiringEpisode?.episode} in ${ few ? '' : '' }${timeFrame}${few ? '' : ''} ${few ? `(${time})` : ''}`; } return ''; };