Konversi Timbal Balik Hijriah ke Gregorian

Seringkali kita ingin tahu tanggal berapa menurut kalender Gregorian (Masehi) suatu tanggal Hijriah. Katakanlah kita ingin tahu tanggal berapa 1 Ramadan 1436? Tanggal berapa menurut kalender Hijriah hari ulang tahun saya? Untuk maksud tersebut anda dapat menggunakan laman web ini. Menurut perhitungan laman web ini tanggal 1 Ramadhan 1436 jatuh pada tanggal 18-juni-2015. Silahkan anda mencoba sendiri untuk tanggal yang lainnya!

Perhatian! Perhitungan komputer laman web ini menggunakan hisap urfi (aritmatika sederhana). Hasil hitungan umumnya tepat, tapi bisa berbeda 1 hari dibandingkan dengan kalender Hijriah Astronomis.

Ubah Gregorian ke Hijriah

tanggal/bulan/tahun:

Ubah Hijriah ke Gregorian

tanggal/bulan/tahun:

Bagaimana Cara Kerjannya?

Kalau anda seorang peminat di bidang Matematika dan Pemrograman dengan komputer, pastinya anda penasaran bagaimana cara kerja program untuk mengubah dari kelender Hijriah ke kalender Masehi dan sebaliknya mengubah dari kalender Masehi ke kalender Hijriah. Sebelum menulis program komputer, tentunya anda harus tahu seluk-beluk kalender. Saya anjurkan anda membaca artikel saya tentang kalender bulan, bila anda ingin tahu tentang hal tersebut. Seperti biasa saya menulis program komputer dalam bahasa javascript. Selanjutnya saya menganggap anda seorang programmer javascript.

Ayo kita intip code javascriptnya. Inti dari program ini adalah mengubah tanggal menjadi hitungan hari. Saya menghitung tanggal 1 Muharram 1420H sebagai hari ke-1. Tanggal 2 Muharram 1420H sebagai hari ke-2 dan seterusnya. Fungsi yang mengubah tanggal Hijriah menjadi hitungan hari sejak 1 Muharram 1420 adalah DaysHijri (baris 021). Hal menarik dalam mencari hitungan hari saya memakai lamanya 1 tahun lunar _lunarY = 354.367068 hari (baris 001, baris 024), bukan seperti kalender Hijriah tradisional, satu tahun lunar adalah 354+11/30 = 354.366667 hari. Hal tersebut dimaksudkan agar hitungan kalender ini akurat sampai 1000 tahun ke depan (sampai dunia kiamat!!!).

Kita perlu juga mengubah tanggal Gregorian menjadi hitungan hari, ini dilakukan oleh fungsi Days (baris). Fungsi DaysHijri dan fungsi Days harus kompatibel alias menghasilkan bilangan yang sama untuk hari yang sama. Jadi Days akan menghasilkan bilangan 1 untuk 1 Muharram 1420 atau bertepatan dengan 18 April 1999. Hal tersebut dicapai dengan memberi offset 196 (baris 017). Fungsi Days yang cukup jenius ini, hasil nyontek dari Astronom kenamaan: Jean Meeus.

Kalau fungsi mencari hari dari kedua sistem kalender sudah saling kompatibel, maka kedua kalender tersebut bisa saling konversi. Hal tersebut dicapai dengan menyamakan hitungan hari. Cara menyamakan dengan cara trial-error menggunakan loop while. Sebelumnya perkirakan tahun Hijriah dicari dengan membagi bilangan hari dengan satu tahun lunar _lunarY (baris 031). Perkiraaan tahun Masehi dicari dengan membagi bilangan hari dengan satu tahun solar _solarY(baris 052). Sebelumnya bilangan hari dikurangi dengan 258 agar pada tanggal 1 januari 2000 menghasilkan bilangan 1 (baris 051).

Sekalipun perhitungan ini dimulai pada 1 Muharram 1420, tetapi bisa menghitung ke belakang (bilangan hari negatif) asalkan jangan kurang dari tahun 1582 Masehi. Karena sebelum tahun 1582 Masehi tidak berlaku kalender Gregorian, melainkan kalender Julian. Sampai disini dulu, semoga tulisan ini bermanfaat.

 

001  var _lunarY = 354.367068
002  var _solarY = 365.2425
003
004  function tgl(Y, M, D){
005    this.day = D;
006    this.month = M;
007    this.year = Y;
008   }
009
010 function Days(Y, M, D){
011   if (M < 3){ Y -= 1; M +=12}
012   Y = Y - 2000
013   var d1 = Math.floor(365.25*Y)
014   var d2 = Math.floor(30.6001*(M + 1))
015   var A = Math.floor(Y/100)
016   var B = Math.floor(Y/400)
017   var hari = d1 + d2 - A + B + D + 196
018   return hari
019 }
020
021 function DaysHijri(Y, M, D){
022  var d1 = Math.floor(29.5*M - 28.999)
023  Y = Y - 1420
024  var d2 = Math.floor(_lunarY*Y)
025  var hari = d1 + d2 + D
026  return hari
027 }
028
029  function toHijri(tanggal){
030    var nday = Days(tanggal.year, tanggal.month, tanggal.day)
031    var tahun = Math.floor(nday/_lunarY) + 1420
032    var bulan = 1
033    var harike = 1
034  
035    while(DaysHijri(tahun, bulan, 1) <= nday){tahun++}
036    tahun--
037  
038    while(DaysHijri(tahun, bulan, 1) <= nday){bulan++}
039    bulan--
040  
041    harike = 1 + nday - DaysHijri(tahun, bulan, 1)
042    if (bulan == 13){bulan = 12; harike += 29}
043  
044    tanggal.day = harike
045    tanggal.month = bulan
046    tanggal.year = tahun
047  }
048
049  function toGregorian(tanggal){
050    var nday = DaysHijri(tanggal.year, tanggal.month, tanggal.day)
051    var nday1 = nday - 258
052    var tahun = Math.floor(nday1/_solarY) + 2000
053    var bulan = 1
054    var harike = 1
055  
056    while(Days(tahun, bulan, 1) <= nday){tahun++}
057    tahun--
058  
059    while(Days(tahun, bulan, 1) <= nday){bulan++}
060    bulan--
061  
062    harike = 1 + nday - Days(tahun, bulan, 1)
063  
064    tanggal.day = harike
065    tanggal.month = bulan
066    tanggal.year = tahun
067  }

Komentar:

Zma(2017-07-16 09:52:29)

Sangat bermanfaat, semoga menjadi ladang pahala. Aaamiiin-

H Bakri Syam(2016-03-26 19:35:52)

tahun kabisat hijriyah terjadi 11 X dalam 30 tahun tidak ada dasarnya !! tetapi hanya 3 X dalam 8 tahun . hitungan siklus tahun hijriyah 8 tahun. yaitu 1 , 4 dan 6

dalenk(2015-12-04 10:14:49)

mantaffff. sangat membantu dan hebat om


Silahkan tulis komentar anda: