From e5bb4dd56192cf74b018ba8259e90df4a6d9e41d Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 10 Sep 2023 02:01:23 -0700 Subject: refactor(anime): generalise airing time --- src/lib/anime.ts | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/lib/anime.ts (limited to 'src/lib/anime.ts') diff --git a/src/lib/anime.ts b/src/lib/anime.ts new file mode 100644 index 00000000..5431a230 --- /dev/null +++ b/src/lib/anime.ts @@ -0,0 +1,48 @@ +import type { Media } from './AniList/media'; + +const totalEpisodes = (anime: Media) => { + return anime.episodes === null ? '' : `/${anime.episodes}`; +}; + +export const airingTime = (anime: Media, upcoming = false) => { + const untilAiring = anime.nextAiringEpisode?.timeUntilAiring; + let timeFrame; + + if (untilAiring !== undefined) { + let minutes = untilAiring / 60; + + if (minutes >= 30) { + let hours = minutes / 60; + + if (hours >= 24) { + let weeks = Math.floor(Math.floor(hours / 24) / 7); + + if (weeks >= 1) { + weeks = Math.round(weeks); + + timeFrame = `${weeks} week${weeks === 1 ? '' : 's'}`; + } else { + const days = Math.round(Math.floor(hours / 24)); + + timeFrame = `${days} day${days === 1 ? '' : 's'}`; + } + } else { + hours = Math.round(hours); + + timeFrame = `${hours} hour${hours === 1 ? '' : 's'}`; + } + } else { + minutes = Math.round(minutes); + + timeFrame = `${minutes} minute${minutes === 1 ? '' : 's'}`; + } + + if (upcoming) { + return `${anime.nextAiringEpisode?.episode}${totalEpisodes(anime)} in ${timeFrame}`; + } else { + return `${anime.nextAiringEpisode?.episode} in ${timeFrame}`; + } + } + + return ''; +}; -- cgit v1.2.3