dersblog

Miladi, Hicri, Ay, Güneş Takvimleri

Miladi ve Hicri takvimleri arasında çevirim yapabilmek için alttaki kodlar, node ortamında işletmek için dateutil.js içinde

module.exports = { hijriToJulian: hijriToJulian,
           gregorianToJulian: gregorianToJulian,
           julianToGregorian: julianToGregorian,
           julianToHijri: julianToHijri}

function hijriToJulian(year, month, day){
  return (
    Math.floor((11 * year + 3) / 30) +
    Math.floor(354 * year) +
    Math.floor(30 * month) -
    Math.floor((month - 1) / 2) +
    day +
    1948440 -
    386
  );
}

function gregorianToJulian (year, month, day) {
  if (month < 3) {
    year -= 1;
    month += 12;
  }

  const a = Math.floor(year / 100.0);
  const b = year === 1582 && (month > 10 || (month === 10 && day > 4))
      ? -10 :
      year === 1582 && month === 10
      ? 0 :
      year < 1583
      ? 0 :
      2 - a + Math.floor(a / 4.0);

  return Math.floor(365.25 * (year + 4716)) + Math.floor(30.6001 * (month + 1)) + day + b - 1524;
}

function julianToHijri (julianDay) {
  const y = 10631.0 / 30.0;
  const epochAstro = 1948084;
  const shift1 = 8.01 / 60.0;

  let z = julianDay - epochAstro;
  const cyc = Math.floor(z / 10631.0);
  z -= 10631 * cyc;
  const j = Math.floor((z - shift1) / y);
  z -= Math.floor(j * y + shift1);

  const year = 30 * cyc + j;
  let month = Math.floor(parseInt((z + 28.5001) / 29.5));
  if (month === 13) {
    month = 12;
  }

  const day = z - Math.floor(29.5001 * month - 29);

  return { year: parseInt(year), month: parseInt(month), day: parseInt(day) };
}

function julianToGregorian (julianDate) {
  let b = 0;
  if (julianDate > 2299160) {
    const a = Math.floor((julianDate - 1867216.25) / 36524.25);
    b = 1 + a - Math.floor(a / 4.0);
  }

  const bb = julianDate + b + 1524;
  let cc = Math.floor((bb - 122.1) / 365.25);
  const dd = Math.floor(365.25 * cc);
  const ee = Math.floor((bb - dd) / 30.6001);

  const day = bb - dd - Math.floor(30.6001 * ee);
  let month = ee - 1;

  if (ee > 13) {
    cc += 1;
    month = ee - 13;
  }

  const year = cc - 4716;

  return { year: parseInt(year), month: parseInt(month), day: parseInt(day) };
}

Bu kodu kullanabilmek için kurban bayramı ilk günü hesabı yapalım. Bayramın hicri takviminde yılın son ayın 10'uncu günü olduğunu biliyoruz, 2024 senesinde bu Temmuz'un 16'sı idi,

var sh = require('./dateutil.js')

// Eid Al-Adha (kurban) was at this day 2024
const y = 2024;
const m = 6;
const d = 16;

const julianDay = sh.gregorianToJulian(y, m, d);

const { year, month, day } = sh.julianToHijri(julianDay);

console.log(year, month, day);
1445 12 10

Doğru ay ve gün verildi, sene de öyle. Peki bir sonraki senede 1446 (2025) yılında bayram hangi güne denk gelir?

// Eid Al-Adha (kurban) is 10th day of last month
var res = sh.hijriToJulian(1446, 12, 10);
res = sh.julianToGregorian(res);
console.log(res.year, res.month, res.day);
2025 6 6

Yukarı