-
Borç Tanımlama
-
Doğum tarihinize göre kaza borcunuzu hesaplayıp veritabanına sabitler.
+
Hicri Kaza Borcu Tanımlama
+
12 yaş mükellefiyeti ve doğum saatiniz (hilal düzeltmesi) baz alınarak borcunuz sabitlenir.
@@ -150,7 +150,7 @@ export function renderKaza(pb) {
);
} catch (err) {
alert(
- "Profil kaydedilemedi. PocketBase alan adlarını kontrol edin.",
+ "Profil kaydedilemedi. PocketBase kullanıcı alanlarını kontrol edin.",
);
}
});
@@ -162,7 +162,7 @@ export function renderKaza(pb) {
?.addEventListener("click", async () => {
if (
confirm(
- "Kaza borçlarınız doğum tarihinize göre yeniden hesaplanıp veritabanına sabitlenecek. Onaylıyor musunuz?",
+ "Doğum tarihiniz ve saatiniz Hicri takvime dönüştürülüp 12 yaş borcunuz PocketBase'e kaydedilecek. Onaylıyor musunuz?",
)
) {
const res = await initAndSaveInitialKaza(pb, birthDate, gender);
@@ -170,7 +170,7 @@ export function renderKaza(pb) {
await refreshKazaStats(container, pb);
showKazaMsg(
container.querySelector("#kazaMsg"),
- `✓ Kaza borçları hesaplandı (${res.days} gün = ${res.fajr} vakit) ve PocketBase'e kaydedildi!`,
+ `✓ Hicri borç hesaplandı (${res.days} gün) ve PocketBase'e kaydedildi!`,
true,
);
} else {
@@ -203,11 +203,11 @@ async function initAndSaveInitialKaza(pb, birthDate, gender) {
try {
const calc = calculateMissedPrayers(birthDate, gender, 12);
- if (!calc || calc.fajr === 0) {
+ if (!calc || calc.days <= 0) {
return {
success: false,
error:
- "Hesaplanan gün sayısı 0 çıktı. Doğum tarihinizin doğrulunu kontrol edin.",
+ "Doğum tarihiniz henüz mükellefiyet yaşından (12 Hicri yıl) küçük görünüyor.",
};
}
@@ -219,7 +219,7 @@ async function initAndSaveInitialKaza(pb, birthDate, gender) {
.collection("kaza_logs")
.getFirstListItem(`user = "${userId}"`);
} catch (e) {
- // Kayıt bulunamazsa sorun yok, yenisini oluşturacağız
+ // Kayıt yoksa yeni oluşturulacak
}
const initialData = {
@@ -251,7 +251,7 @@ async function initAndSaveInitialKaza(pb, birthDate, gender) {
success: false,
error:
err?.message ||
- "PocketBase kayıt yaparken hata oluştu. kaza_logs koleksiyon izinlerini (API Rules) ve alan adlarını kontrol edin.",
+ "PocketBase kayıt yaparken hata oluştu. kaza_logs izinlerini kontrol edin.",
};
}
}
@@ -272,7 +272,7 @@ async function updateKazaCount(container, pb, direction) {
if (!userRecord) {
showKazaMsg(
msg,
- "Önce yukarıdaki 'Hesapla & Kaydet' butonuna tıklamalısınız.",
+ "Önce yukarıdaki 'Kaza Borçlarını Otomatik Hesapla & PB'ye Kaydet' butonuna tıklamalısınız.",
false,
);
return;
diff --git a/src/utils/hijri.js b/src/utils/hijri.js
index 56b0089..e641c6a 100755
--- a/src/utils/hijri.js
+++ b/src/utils/hijri.js
@@ -25,23 +25,17 @@ const DAYS = [
export function gregorianToHijri(dateInput = new Date()) {
const date = new Date(dateInput);
-
- // Akşam 19:00 ve sonrası doğumlarda Hicri takvim bir sonraki güne geçer
const hours = date.getHours();
let dayOffset = 2; // Türkiye coğrafi hilal düzeltmesi
-
if (hours >= 19) {
dayOffset += 1;
}
-
const adjustedDate = new Date(
date.getTime() + dayOffset * 24 * 60 * 60 * 1000,
);
-
const year = adjustedDate.getFullYear();
const month = adjustedDate.getMonth() + 1;
const day = adjustedDate.getDate();
-
let a = Math.floor((14 - month) / 12);
let y = year + 4800 - a;
let m = month + 12 * a - 3;
@@ -53,7 +47,6 @@ export function gregorianToHijri(dateInput = new Date()) {
Math.floor(y / 100) +
Math.floor(y / 400) -
32045;
-
let l = jdn - 1948440 + 10632;
let n = Math.floor((l - 1) / 10631);
l = l - 10631 * n + 354;
@@ -65,18 +58,14 @@ export function gregorianToHijri(dateInput = new Date()) {
Math.floor((30 - j) / 15) * Math.floor((17719 * j) / 50) -
Math.floor(j / 16) * Math.floor((15238 * j) / 43) +
29;
-
let hijriMonth = Math.floor((24 * l) / 709);
let hijriDay = l - Math.floor((709 * hijriMonth) / 24);
let hijriYear = 30 * n + j - 30;
-
if (hijriMonth > 12) {
hijriMonth -= 12;
hijriYear += 1;
}
-
const weekday = DAYS[date.getDay()];
-
return {
year: hijriYear,
month: hijriMonth,
@@ -86,20 +75,31 @@ export function gregorianToHijri(dateInput = new Date()) {
};
}
-export function calculateMissedPrayers(birthDate, gender, mukallafAge = 12) {
- const birth = new Date(birthDate);
- const today = new Date();
- today.setHours(0, 0, 0, 0);
+export function calculateMissedPrayers(birthDateStr, gender, mukallafAge = 12) {
+ if (!birthDateStr)
+ return { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0, days: 0 };
- const mukallafDate = new Date(birth);
- mukallafDate.setFullYear(mukallafDate.getFullYear() + mukallafAge);
-
- if (today <= mukallafDate) {
+ const birthDate = new Date(birthDateStr);
+ if (isNaN(birthDate.getTime())) {
return { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0, days: 0 };
}
- const diffTime = today - mukallafDate;
- const days = Math.floor(diffTime / (1000 * 60 * 60 * 24));
+ // 1. Doğum tarihini Hicri'ye çevirip saat detayına göre kontrol ediyoruz
+ const hijriBirth = gregorianToHijri(birthDate);
+
+ // 2. Mükellefiyet Yaşı (12 Hicri Yıl = 12 * 354.367 gün ≈ 4252.4 gün)
+ const HICRI_YEAR_IN_MS = 354.367 * 24 * 60 * 60 * 1000;
+ const mukallafTimeMs = birthDate.getTime() + mukallafAge * HICRI_YEAR_IN_MS;
+
+ const today = new Date();
+
+ if (today.getTime() <= mukallafTimeMs) {
+ return { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0, days: 0 };
+ }
+
+ // 3. Mükellefiyetten bugüne geçen Hicri Gün sayısı
+ const diffTimeMs = today.getTime() - mukallafTimeMs;
+ const days = Math.floor(diffTimeMs / (1000 * 60 * 60 * 24));
return {
fajr: days,
@@ -109,6 +109,7 @@ export function calculateMissedPrayers(birthDate, gender, mukallafAge = 12) {
isha: days,
vitr: days,
days,
+ hijriBirthYear: hijriBirth.year,
};
}