Skip to content

Commit

Permalink
Add first third of night end time
Browse files Browse the repository at this point in the history
  • Loading branch information
AmrSaber committed Sep 12, 2024
1 parent 3e7a247 commit 4934ef3
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 25 deletions.
3 changes: 2 additions & 1 deletion src/lib/i18n/dicts/ar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,6 @@ export default {
sunrise: 'شروق الشمس',
'friday-prayer': 'الجمعة',
midnight: 'منتصف الليل',
'last-third-of-night': 'الثلث الأخير من الليل',
'last-third-of-night': 'بداية الثلث الأخير من الليل',
'first-third-of-night': 'نهاية الثلث الأول من الليل',
};
3 changes: 2 additions & 1 deletion src/lib/i18n/dicts/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,6 @@ export default {
sunrise: 'Sunrise',
'friday-prayer': 'Jummah',
midnight: 'Midnight',
'last-third-of-night': 'Last third of night',
'last-third-of-night': 'Last third of night (Begins)',
'first-third-of-night': 'First third of night (Ends)',
};
56 changes: 36 additions & 20 deletions src/lib/utils/timings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,39 +2,55 @@ import { Timing } from '../types';
import type { DayTimings } from '../types/pure';

export function getMidnight(dayTimings: DayTimings | null): Timing | null {
if (dayTimings == null) return null;
if (dayTimings == null) return null;

const sunset = dayTimings.sunset.start;
const fajr = dayTimings.fajr.start;
const sunset = dayTimings.sunset.start;
const fajr = dayTimings.fajr.start;

const midnight = new Timing();
const midnight = new Timing();

midnight.hours = (sunset.hours + fajr.hours + 24) / 2;
midnight.minutes = (sunset.minutes + fajr.minutes) / 2;
midnight.hours = (sunset.hours + fajr.hours + 24) / 2;
midnight.minutes = (sunset.minutes + fajr.minutes) / 2;

return midnight.normalize();
return midnight.normalize();
}

export function getFirstThirdOfNight(dayTimings: DayTimings | null): Timing | null {
if (dayTimings == null) return null;

const sunset = dayTimings.sunset.start;
const fajr = dayTimings.fajr.start;

const hoursThird = ((fajr.hours + 24 - sunset.hours) % 24) / 3;
const minutesThird = ((fajr.minutes + 60 - sunset.minutes) % 60) / 3;

const firstThird = new Timing();
firstThird.hours = sunset.hours + hoursThird;
firstThird.minutes = sunset.minutes + minutesThird;

return firstThird.normalize();
}

export function getLastThirdOfNight(dayTimings: DayTimings | null): Timing | null {
if (dayTimings == null) return null;
if (dayTimings == null) return null;

const sunset = dayTimings.sunset.start;
const fajr = dayTimings.fajr.start;
const sunset = dayTimings.sunset.start;
const fajr = dayTimings.fajr.start;

const hoursThird = ((fajr.hours + 24 - sunset.hours) % 24) / 3;
const minutesThird = ((fajr.minutes + 60 - sunset.minutes) % 60) / 3;
const hoursThird = ((fajr.hours + 24 - sunset.hours) % 24) / 3;
const minutesThird = ((fajr.minutes + 60 - sunset.minutes) % 60) / 3;

const lastThird = new Timing();
lastThird.hours = sunset.hours + 2 * hoursThird;
lastThird.minutes = sunset.minutes + 2 * minutesThird;
const lastThird = new Timing();
lastThird.hours = sunset.hours + 2 * hoursThird;
lastThird.minutes = sunset.minutes + 2 * minutesThird;

return lastThird.normalize();
return lastThird.normalize();
}

export function getNextDay(): Date {
const nextDay = new Date();
nextDay.setDate(nextDay.getDate() + 1);
nextDay.setHours(0, 0, 0, 0);
const nextDay = new Date();
nextDay.setDate(nextDay.getDate() + 1);
nextDay.setHours(0, 0, 0, 0);

return nextDay;
return nextDay;
}
10 changes: 7 additions & 3 deletions src/routes/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import { selectedLanguage, selectedMosque, selectedCountry, selectedMosqueId, showTimerSeconds } from '$lib/stores';
import { Timing, type HijriDate } from '$lib/types';
import type { DayTimings } from '$lib/types/pure';
import { getLastThirdOfNight, getMidnight } from '$lib/utils';
import { getFirstThirdOfNight, getLastThirdOfNight, getMidnight } from '$lib/utils';
import { markImminentElement } from '$lib/helpers';
import { fade } from 'svelte/transition';
import { LocalStorageCache } from '$lib/utils/cache';
Expand All @@ -25,6 +25,7 @@
let hijriDate: HijriDate | null = null;
$: midnightTime = getMidnight(dayTimings);
$: lastThirdTime = getLastThirdOfNight(dayTimings);
$: firstThirdTime = getFirstThirdOfNight(dayTimings);
let nextPrayerTime: Timing | undefined;
let nextPrayerLabel: string | undefined;
Expand Down Expand Up @@ -264,15 +265,18 @@

<div class="table" id="other-timings">
<span class="label">{t('sunrise')}</span>
<span class="prayer-time">{dayTimings?.sunrise.format()}</span>
<span>{dayTimings?.sunrise.format()}</span>

{#if isFriday}
<span class="label">{t('friday-prayer')}</span>
<span class="prayer-time">{fridayPrayerTiming?.format()}</span>
{/if}

<span class="label">{t('first-third-of-night')}</span>
<span>{firstThirdTime?.format()}</span>

<span class="label">{t('midnight')}</span>
<span class="prayer-time">{midnightTime?.format()}</span>
<span>{midnightTime?.format()}</span>

<span class="label">{t('last-third-of-night')}</span>
<span>{lastThirdTime?.format()}</span>
Expand Down

0 comments on commit 4934ef3

Please sign in to comment.