Skip to content

Instantly share code, notes, and snippets.

@priyadi
Created May 4, 2019 05:51
Show Gist options
  • Save priyadi/0836255e865cf5c9c6157b60f5f80a90 to your computer and use it in GitHub Desktop.
Save priyadi/0836255e865cf5c9c6157b60f5f80a90 to your computer and use it in GitHub Desktop.
Script Perhitungan Hisab Awal Bulan Hijriah
#!/usr/bin/env python
'''
Script sederhana hisab bulan baru hijriah.
Mungkin tidak 100% akurat.
Perlu pyephem (pip install ephem).
'''
import ephem
from datetime import datetime, timedelta
# waktu awal dan akhir perhitungan.
# ganti ini untuk menghitung pada waktu yang lain.
sekarang = datetime(2018, 1, 1, 5, 0, 0)
selesai = datetime(2022, 12, 1, 5, 0, 0)
# init objek bulan & matahari.
bulan = ephem.Moon()
matahari = ephem.Sun()
# pengamat di Jakarta.
pengamat = ephem.Observer()
pengamat.lon = '106.816667'
pengamat.lat = '-6.2'
pengamat.elevation = 8
# loop setiap hari mulai dari sekarang sampai selesai.
ketinggiankemarin = 0
while sekarang <= selesai:
pengamat.date = sekarang
# waktu matahari terbenam dari pengamat.
terbenam = pengamat.next_setting(matahari)
pengamat.date = terbenam
bulan.compute(pengamat)
# ketinggian/altitude bulan saat matahari terbenam dalam derajat.
ketinggian = float(bulan.alt) / 0.01745329252
# jika kemarin bulan di bawah matahari DAN hari ini bulan di atas matahari,
# maka masuk bulan baru menurut hisab
if ketinggian > 0 and ketinggiankemarin <= 0:
# jika ketinggian bulan di atas 3°, maka harusnya hilal kelihatan melalui rukyat.
# sehingga baik pemerintah & muhammadiyah masuk bulan baru
if ketinggian > 3:
print("%s-%s-%s: Masuk bulan baru. Ketinggian bulan: %s°" % (sekarang.year, sekarang.month, sekarang.day, ketinggian))
# jika ketinggian bulan di bawah 3°, maka bulan belum tentu terlihat melalui rukyat
# sehingga ada kemungkinan pemerintah baru masuk bulan baru esok hari.
else:
print("%s-%s-%s: Muhammadiyah masuk bulan baru, pemerintah tergantung rukyat. Ketinggian bulan: %s°" % (sekarang.year, sekarang.month, sekarang.day, ketinggian))
# majukan parameter untuk iterasi berikutnya
ketinggiankemarin = ketinggian
sekarang += timedelta(days = 1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment