Laman ini dikhususkan untuk meletakan semua Source Code dalam beberapa Bahasa Pemrograman untuk Sistem Penanggalan Tanggal dan Waktu dalam Kalender Hijriah (Islam), dan tetap disertakan dan Konversi dari Penanggalan Umum (Masehi/Gregorian) ke Penanggalan Hijriah/Islam. Jika ingin melihat Halaman ini khusus untuk Penanggalan Umum (Masehi/Gregorian) saja, silakan lihat di sini. Laman ini juga merupakan bagian dari CALENDAR SYSTEM.
Epoch adalah Titik Nol Kalender Tanggal Julian (JDN) yang dianggap sebagai 1 Muharram tahun 1 H. Masalahnya, saat peristiwa Hijrah terjadi 622 M, jauh sebelum ada sistem penomoran hari absolut (JDN) — jadi epoch ini direkonstruksi mundur oleh para astronom/ahli kalender berabad-abad kemudian, dan ternyata ada 2 hasil rekonstruksi yang berbeda 1 hari.
Jadi, Pada Kalender Hijriah/Islam Tabular, mengapa ada 2 Jenis Epoch, yaitu :
- Epoch Astronomis : JDN 1948439 (Kamis, 15 Juli 622 M)
- Epoch Sipil : JDN 1948440 (Jumat, 16 Juli 622 M)
PERBANDINGAN KONVERSI KALENDER MASEHI-HIJRIAH
1. Source Codes (Text-Based)
1. Java
Program Konversi Penanggalan Hijriah dengan Java :
import java.util.*;import java.util.Date;public class KonversiPenanggalanHijriah {public static void main (String[] args) {String cbulan[]={"Muharram","Shafar","Rabiul Awal","Rabiul Akhir","Jumadil Awal","Jumadil Akhir","Rajab","Syaban","Ramadhan","Syawal","Dzulkaidah","Dzulhijjah"};String gbulan[] = {"Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember" };Scanner MASUKAN = new java.util.Scanner(System.in);int zjd, zl, zn, zj, hari, tahun, tgl, bln, thn, bulan;System.out.println("KONVERSI TANGGAL MASEHI-HIJRIAH");Calendar cal = Calendar.getInstance();thn = cal.get(Calendar.YEAR);bln = cal.get(Calendar.MONTH)+1;tgl = cal.get(Calendar.DATE);if ((thn > 1582) || ((thn == 1582) && (bln > 10)) || ((thn == 1582) && (bln == 10)&& (tgl > 14))) {zjd = ((1461 * (thn + 4800 + ((bln - 14) / 12))) / 4) + ((367 * (bln - 2 - 12 *(((bln - 14) / 12)))) / 12) - ((3 * (((thn + 4900 + ((bln - 14) / 12)) / 100)))/ 4) + tgl - 32075;} else {zjd = 367 * thn - ((7 * (thn + 5001 + ((bln - 9) / 7))) / 4) + ((275 * bln) / 9)+ tgl + 1729777;}zl = zjd - 1948440 + 10632;zn = ((zl - 1) / 10631);zl = zl - 10631 * zn + 354;zj = ((10985 - zl) / 5316) * (((50 * zl) / 17719)) + ((zl / 5670)) * ((43 * zl) / 15238);zl = zl-(((30 - zj) / 15)) * (((17719 * zj) / 50))-((zj / 16)) * (((15238 * zj) / 43)) + 29;bulan = ((24 * zl) / 709);hari = zl-((709 * bulan) / 24);tahun = 30 * zn + zj - 30;System.out.println("Tanggal Masehi/Gregorian : "+tgl+" "+gbulan[bln-1]+" "+thn);System.out.println("Tanggal Hijriah : "+hari+" "+cbulan[bulan-1]+" "+tahun+" H");}}
2. C
Program Konversi Penanggalan Hijriah dengan Pemrograman C :
#include <stdio.h>#include <time.h>int main() {const char *cbulan[] = {"Muharram","Shafar","Rabiul Awal","Rabiul Akhir","Jumadil Awal","Jumadil Akhir","Rajab","Syaban","Ramadhan","Syawal","Dzulkaidah","Dzulhijjah"};const char *gbulan[] = {"Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"};int zjd, zl, zn, zj, hari, tahun, tgl, bln, thn, bulan;printf("KONVERSI TANGGAL MASEHI - HIJRIAH\n");// Ambil tanggal hari initime_t now = time(NULL);struct tm *ltm = localtime(&now);thn = 1900 + ltm->tm_year; // Tahunbln = 1 + ltm->tm_mon; // Bulan (0-based → +1)tgl = ltm->tm_mday; // Hari// Hitung Julian Day Number (JDN)if ((thn > 1582) || ((thn == 1582) && (bln > 10)) || ((thn == 1582) && (bln == 10) && (tgl > 14))) {zjd = ((1461 * (thn + 4800 + ((bln - 14) / 12))) / 4) +((367 * (bln - 2 - 12 * ((bln - 14) / 12))) / 12) -((3 * ((thn + 4900 + ((bln - 14) / 12)) / 100)) / 4) +tgl - 32075;} else {zjd = 367 * thn -((7 * (thn + 5001 + ((bln - 9) / 7))) / 4) +((275 * bln) / 9) +tgl + 1729777;}// Konversi ke Hijriahzl = zjd - 1948440 + 10632;zn = (zl - 1) / 10631;zl = zl - 10631 * zn + 354;zj = ((10985 - zl) / 5316) * ((50 * zl) / 17719) +(zl / 5670) * ((43 * zl) / 15238);zl = zl - ((30 - zj) / 15) * ((17719 * zj) / 50) -(zj / 16) * ((15238 * zj) / 43) + 29;bulan = (24 * zl) / 709;hari = zl - ((709 * bulan) / 24);tahun = 30 * zn + zj - 30;// Output hasilprintf("Tanggal Masehi/Gregorian : %d %s %d\n", tgl, gbulan[bln-1], thn);printf("Tanggal Hijriah : %d %s %d H\n", hari, cbulan[bulan-1], tahun);return 0;}
3. C++
Program Konversi Penanggalan Hijriah dengan C++ :
#include <iostream>#include <ctime>#include <string>using namespace std;int main() {string cbulan[] = {"Muharram","Shafar","Rabiul Awal","Rabiul Akhir","Jumadil Awal","Jumadil Akhir","Rajab","Syaban","Ramadhan","Syawal","Dzulkaidah","Dzulhijjah"};string gbulan[] = {"Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"};int zjd, zl, zn, zj, hari, tahun, tgl, bln, thn, bulan;cout << "KONVERSI TANGGAL MASEHI - HIJRIAH" << endl;// Ambil tanggal hari initime_t now = time(0);tm *ltm = localtime(&now);thn = 1900 + ltm->tm_year; // tahunbln = 1 + ltm->tm_mon; // bulan (0-based → +1)tgl = ltm->tm_mday; // hari// Hitung Julian Day Number (JDN)if ((thn > 1582) || ((thn == 1582) && (bln > 10)) || ((thn == 1582) && (bln == 10) && (tgl > 14))) {zjd = ((1461 * (thn + 4800 + ((bln - 14) / 12))) / 4) +((367 * (bln - 2 - 12 * ((bln - 14) / 12))) / 12) -((3 * ((thn + 4900 + ((bln - 14) / 12)) / 100)) / 4) +tgl - 32075;} else {zjd = 367 * thn -((7 * (thn + 5001 + ((bln - 9) / 7))) / 4) +((275 * bln) / 9) +tgl + 1729777;}// Konversi ke Hijriahzl = zjd - 1948440 + 10632;zn = (zl - 1) / 10631;zl = zl - 10631 * zn + 354;zj = ((10985 - zl) / 5316) * ((50 * zl) / 17719) +(zl / 5670) * ((43 * zl) / 15238);zl = zl - ((30 - zj) / 15) * ((17719 * zj) / 50) -(zj / 16) * ((15238 * zj) / 43) + 29;bulan = (24 * zl) / 709;hari = zl - ((709 * bulan) / 24);tahun = 30 * zn + zj - 30;// Output hasilcout << "Tanggal Masehi/Gregorian : " << tgl << " " << gbulan[bln-1] << " " << thn << endl;cout << "Tanggal Hijriah : " << hari << " " << cbulan[bulan-1] << " " << tahun << " H" << endl;return 0;}
4. C#
Program Konversi Penanggalan Hijriah dengan C++ :
using System;public class KonversiPenanggalanHijriah{public static void Main(string[] args){string[] cbulan = { "Muharram", "Shafar", "Rabiul Awal", "Rabiul Akhir", "Jumadil Awal","Jumadil Akhir", "Rajab", "Syaban", "Ramadhan", "Syawal", "Dzulkaidah", "Dzulhijjah" };string[] gbulan = { "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli","Agustus", "September", "Oktober", "November", "Desember" };int zjd, zl, zn, zj, hari, tahun, tgl, bln, thn, bulan;Console.WriteLine("KONVERSI TANGGAL MASEHI-HIJRIAH");DateTime now = DateTime.Now;thn = now.Year;bln = now.Month;tgl = now.Day;// Hitung Julian Day Numberif ((thn > 1582) || ((thn == 1582) && (bln > 10)) || ((thn == 1582) && (bln == 10) && (tgl > 14))){zjd = ((1461 * (thn + 4800 + ((bln - 14) / 12))) / 4) +((367 * (bln - 2 - 12 * ((bln - 14) / 12))) / 12) -((3 * ((thn + 4900 + ((bln - 14) / 12)) / 100)) / 4) +tgl - 32075;}else{zjd = 367 * thn -((7 * (thn + 5001 + ((bln - 9) / 7))) / 4) +((275 * bln) / 9) +tgl + 1729777;}// Konversi ke Hijriahzl = zjd - 1948440 + 10632;zn = (zl - 1) / 10631;zl = zl - 10631 * zn + 354;zj = ((10985 - zl) / 5316) * ((50 * zl) / 17719) +(zl / 5670) * ((43 * zl) / 15238);zl = zl - ((30 - zj) / 15) * ((17719 * zj) / 50) -(zj / 16) * ((15238 * zj) / 43) + 29;bulan = (24 * zl) / 709;hari = zl - ((709 * bulan) / 24);tahun = 30 * zn + zj - 30;// OutputConsole.WriteLine("Tanggal Masehi/Gregorian : {0} {1} {2}", tgl, gbulan[bln - 1], thn);Console.WriteLine("Tanggal Hijriah : {0} {1} {2} H", hari, cbulan[bulan - 1], tahun);}}
5. Python
Program Konversi Penanggalan Hijriah dengan Python :
import datetimeimport mathdef konversi_hijriah():cbulan = ["Muharram", "Shafar", "Rabiul Awal", "Rabiul Akhir", "Jumadil Awal","Jumadil Akhir", "Rajab", "Syaban", "Ramadhan", "Syawal","Dzulkaidah", "Dzulhijjah"]gbulan = ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli","Agustus", "September", "Oktober", "November", "Desember"]print("KONVERSI TANGGAL MASEHI-HIJRIAH")# --- Mengambil Tanggal Masehi Saat Ini ---today = datetime.date.today()thn = today.yearbln = today.monthtgl = today.dayzjd, zl, zn, zj, hari, tahun, bulan = 0, 0, 0, 0, 0, 0, 0if (thn > 1582) or ((thn == 1582) and (bln > 10)) or ((thn == 1582) and (bln == 10) and (tgl > 14)):# Gregorian Calendarzjd = math.floor((1461 * (thn + 4800 + ((bln - 14) / 12))) / 4 + \(367 * (bln - 2 - 12 * (((bln - 14) / 12)))) / 12 - \(3 * (((thn + 4900 + ((bln - 14) / 12)) / 100))) / 4 + \tgl - 32075)else:# Julian Calendarzjd = math.floor(367 * thn - ((7 * (thn + 5001 + ((bln - 9) / 7))) / 4) + \((275 * bln) / 9) + \tgl + 1729777)# --- Konversi Hari Julian ke Tanggal Hijriah ---zl = int(zjd - 1948440 + 10632)zn = int((zl - 1) / 10631)zl = int(zl - 10631 * zn + 354)zj = int(((10985 - zl) // 5316) * (((50 * zl) // 17719)) + ((zl // 5670)) * ((43 * zl) // 15238))zl = int(zl - (((30 - zj) // 15)) * (((17719 * zj) // 50)) - ((zj // 16)) * (((15238 * zj) // 43)) + 29)bulan = (24 * zl) // 709hari = zl - ((709 * bulan) // 24)tahun = 30 * zn + zj - 30# --- Output Hasil ---print(f"Tanggal Masehi/Gregorian : {tgl} {gbulan[bln - 1]} {thn}")print(f"Tanggal Hijriah : {hari} {cbulan[bulan - 1]} {tahun} H")if __name__ == "__main__":konversi_hijriah()
6. Ruby
Program Konversi Penanggalan Hijriah dengan Ruby :
require 'date'def konversi_hijriahcbulan = ["Muharram", "Shafar", "Rabiul Awal", "Rabiul Akhir", "Jumadil Awal","Jumadil Akhir", "Rajab", "Syaban", "Ramadhan", "Syawal","Dzulkaidah", "Dzulhijjah"]gbulan = ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli","Agustus", "September", "Oktober", "November", "Desember"]puts "KONVERSI TANGGAL MASEHI-HIJRIAH"# --- Mengambil Tanggal Masehi Saat Ini ---today = Date.todaythn = today.yearbln = today.monthtgl = today.dayzjd = zl = zn = zj = hari = tahun = bulan = 0# --- Konversi ke Julian Day Number (Gregorian vs Julian Calendar) ---if (thn > 1582) || (thn == 1582 && bln > 10) || (thn == 1582 && bln == 10 && tgl > 14)zjd = ((1461 * (thn + 4800 + ((bln - 14) / 12.0))) / 4.0) +((367 * (bln - 2 - 12 * ((bln - 14) / 12.0))) / 12.0) -((3 * ((thn + 4900 + ((bln - 14) / 12.0)) / 100.0)) / 4.0) +tgl - 32075elsezjd = 367 * thn -((7 * (thn + 5001 + ((bln - 9) / 7.0))) / 4.0) +((275 * bln) / 9.0) + tgl + 1729777endzjd = zjd.floor# --- Konversi Hari Julian ke Tanggal Hijriah ---zl = (zjd - 1948440 + 10632).to_izn = ((zl - 1) / 10631).to_izl = (zl - 10631 * zn + 354).to_izj = (((10985 - zl) / 5316).to_i * ((50 * zl) / 17719).to_i) +((zl / 5670).to_i * ((43 * zl) / 15238).to_i)zl = (zl - (((30 - zj) / 15).to_i * ((17719 * zj) / 50).to_i) -((zj / 16).to_i * ((15238 * zj) / 43).to_i) + 29).to_ibulan = ((24 * zl) / 709).to_ihari = zl - ((709 * bulan) / 24).to_itahun = 30 * zn + zj - 30# --- Output Hasil ---puts "Tanggal Masehi/Gregorian : #{tgl} #{gbulan[bln - 1]} #{thn}"puts "Tanggal Hijriah : #{hari} #{cbulan[bulan - 1]} #{tahun} H"end# Jalankan programkonversi_hijriah
7. Dart
Program Konversi Penanggalan Hijriah dengan Dart :
import 'dart:core';void main() {List<String> cbulan = ["Muharram","Shafar","Rabiul Awal","Rabiul Akhir","Jumadil Awal","Jumadil Akhir","Rajab","Syaban","Ramadhan","Syawal","Dzulkaidah","Dzulhijjah"];List<String> gbulan = ["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"];print("KONVERSI TANGGAL MASEHI → HIJRIAH\n");// Ambil tanggal sekarangDateTime now = DateTime.now();int tgl = now.day;int bln = now.month;int thn = now.year;int zjd, zl, zn, zj, hari, tahun, bulan;// Rumus Julian Day Numberif ((thn > 1582) ||((thn == 1582) && (bln > 10)) ||((thn == 1582) && (bln == 10) && (tgl > 14))) {zjd = ((1461 * (thn + 4800 + ((bln - 14) ~/ 12))) ~/ 4) +((367 * (bln - 2 - 12 * (((bln - 14) ~/ 12)))) ~/ 12) -((3 * (((thn + 4900 + ((bln - 14) ~/ 12)) ~/ 100))) ~/ 4) +tgl -32075;} else {zjd = 367 * thn -((7 * (thn + 5001 + ((bln - 9) ~/ 7))) ~/ 4) +((275 * bln) ~/ 9) +tgl +1729777;}zl = zjd - 1948440 + 10632;zn = ((zl - 1) ~/ 10631);zl = zl - 10631 * zn + 354;zj = (((10985 - zl) ~/ 5316) * ((50 * zl) ~/ 17719)) +((zl ~/ 5670) * ((43 * zl) ~/ 15238));zl = zl -(((30 - zj) ~/ 15) * ((17719 * zj) ~/ 50)) -((zj ~/ 16) * ((15238 * zj) ~/ 43)) +29;bulan = ((24 * zl) ~/ 709);hari = zl - ((709 * bulan) ~/ 24);tahun = 30 * zn + zj - 30;print("Tanggal Masehi (Gregorian) : $tgl ${gbulan[bln - 1]} $thn");print("Tanggal Hijriah : $hari ${cbulan[bulan - 1]} $tahun H");}
8. Golang
Program Konversi Penanggalan Hijriah dengan Go(lang) :
package mainimport ("fmt""time")func main() {cbulan := [12]string{"Muharram", "Shafar", "Rabiul Awal", "Rabiul Akhir","Jumadil Awal", "Jumadil Akhir", "Rajab", "Syaban","Ramadhan", "Syawal", "Dzulkaidah", "Dzulhijjah",}gbulan := [12]string{"Januari", "Februari", "Maret", "April", "Mei", "Juni","Juli", "Agustus", "September", "Oktober", "November", "Desember",}fmt.Println("KONVERSI TANGGAL MASEHI-HIJRIAH")// Ambil tanggal saat ininow := time.Now()thn := now.Year()bln := int(now.Month())tgl := now.Day()var zjd, zl, zn, zj, hari, tahun, bulan int// Konversi tanggal Gregorian ke Julian Day Numberif (thn > 1582) || (thn == 1582 && bln > 10) || (thn == 1582 && bln == 10 && tgl > 14) {zjd = ((1461 * (thn + 4800 + ((bln - 14) / 12))) / 4) +((367 * (bln - 2 - 12*((bln-14)/12))) / 12) -((3 * (((thn + 4900 + ((bln - 14) / 12)) / 100))) / 4) +tgl - 32075} else {zjd = 367*thn -((7 * (thn + 5001 + ((bln - 9) / 7))) / 4) +((275 * bln) / 9) + tgl + 1729777}// Konversi Julian ke Hijriahzl = zjd - 1948440 + 10632zn = (zl - 1) / 10631zl = zl - 10631*zn + 354zj = ((10985 - zl) / 5316) * ((50 * zl) / 17719)zj += (zl / 5670) * ((43 * zl) / 15238)zl = zl - (((30 - zj) / 15) * ((17719 * zj) / 50))zl -= ((zj / 16) * ((15238 * zj) / 43)) - 29bulan = (24 * zl) / 709hari = zl - ((709 * bulan) / 24)tahun = 30*zn + zj - 30fmt.Printf("Tanggal Masehi/Gregorian : %d %s %d\n", tgl, gbulan[bln-1], thn)fmt.Printf("Tanggal Hijriah : %d %s %d H\n", hari, cbulan[bulan-1], tahun)}
9. JavaScript (Node.js / Without HTML)
Program Konversi Penanggalan Hijriah dengan JavaScript :
import datetimeimport mathdef konversi_hijriah():cbulan = ["Muharram", "Shafar", "Rabiul Awal", "Rabiul Akhir", "Jumadil Awal","Jumadil Akhir", "Rajab", "Syaban", "Ramadhan", "Syawal","Dzulkaidah", "Dzulhijjah"]gbulan = ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli","Agustus", "September", "Oktober", "November", "Desember"]print("KONVERSI TANGGAL MASEHI-HIJRIAH")# --- Mengambil Tanggal Masehi Saat Ini ---today = datetime.date.today()thn = today.yearbln = today.monthtgl = today.dayzjd, zl, zn, zj, hari, tahun, bulan = 0, 0, 0, 0, 0, 0, 0if (thn > 1582) or ((thn == 1582) and (bln > 10)) or ((thn == 1582) and (bln == 10) and (tgl > 14)):# Gregorian Calendarzjd = math.floor((1461 * (thn + 4800 + ((bln - 14) / 12))) / 4 + \(367 * (bln - 2 - 12 * (((bln - 14) / 12)))) / 12 - \(3 * (((thn + 4900 + ((bln - 14) / 12)) / 100))) / 4 + \tgl - 32075)else:# Julian Calendarzjd = math.floor(367 * thn - ((7 * (thn + 5001 + ((bln - 9) / 7))) / 4) + \((275 * bln) / 9) + \tgl + 1729777)# --- Konversi Hari Julian ke Tanggal Hijriah ---zl = int(zjd - 1948440 + 10632)zn = int((zl - 1) / 10631)zl = int(zl - 10631 * zn + 354)zj = int(((10985 - zl) // 5316) * (((50 * zl) // 17719)) + ((zl // 5670)) * ((43 * zl) // 15238))zl = int(zl - (((30 - zj) // 15)) * (((17719 * zj) // 50)) - ((zj // 16)) * (((15238 * zj) // 43)) + 29)bulan = (24 * zl) // 709hari = zl - ((709 * bulan) // 24)tahun = 30 * zn + zj - 30# --- Output Hasil ---print(f"Tanggal Masehi/Gregorian : {tgl} {gbulan[bln - 1]} {thn}")print(f"Tanggal Hijriah : {hari} {cbulan[bulan - 1]} {tahun} H")if __name__ == "__main__":konversi_hijriah()
10. JavaScript (With HTML)
<!DOCTYPE html><html lang="id"><head><meta charset="UTF-8" /><title>Konversi Masehi ke Hijriah</title><style>body {font-family: Arial, sans-serif;margin: 30px;background: #f5f5f5;}h2 {color: #2c3e50;}.result {margin-top: 20px;padding: 15px;background: #fff;border-radius: 8px;box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);}.date {font-size: 18px;margin: 5px 0;}</style></head><body><h2>Konversi Tanggal Masehi ke Hijriah</h2><div class="result"><div class="date" id="gregorian"></div><div class="date" id="hijri"></div></div><script>function konversiMasehiKeHijriah() {const cbulan = ["Muharram","Shafar","Rabiul Awal","Rabiul Akhir","Jumadil Awal","Jumadil Akhir","Rajab","Syaban","Ramadhan","Syawal","Dzulkaidah","Dzulhijjah",];const gbulan = ["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember",];const today = new Date();let thn = today.getFullYear();let bln = today.getMonth() + 1;let tgl = today.getDate();let zjd, zl, zn, zj, bulan, hari, tahun;// Hitung Julian Day Number (JDN)if (thn > 1582 ||(thn === 1582 && bln > 10) ||(thn === 1582 && bln === 10 && tgl > 14)) {zjd = Math.floor((1461 * (thn + 4800 + (bln - 14) / 12)) / 4 +(367 * (bln - 2 - 12 * ((bln - 14) / 12))) / 12 -(3 * ((thn + 4900 + (bln - 14) / 12) / 100)) / 4 +tgl -32075);} else {zjd = Math.floor(367 * thn -(7 * (thn + 5001 + (bln - 9) / 7)) / 4 +(275 * bln) / 9 +tgl +1729777);}// Algoritma konversi ke Hijriahzl = Math.floor(zjd - 1948440 + 10632);zn = Math.floor((zl - 1) / 10631);zl = zl - 10631 * zn + 354;zj =Math.floor((10985 - zl) / 5316) * Math.floor((50 * zl) / 17719) +Math.floor(zl / 5670) * Math.floor((43 * zl) / 15238);zl =zl -Math.floor((30 - zj) / 15) * Math.floor((17719 * zj) / 50) -Math.floor(zj / 16) * Math.floor((15238 * zj) / 43) +29;bulan = Math.floor((24 * zl) / 709);hari = Math.floor(zl - Math.floor((709 * bulan) / 24));tahun = 30 * zn + zj - 30;// Tampilkan ke HTMLdocument.getElementById("gregorian").innerText = `Tanggal Masehi/Gregorian : ${tgl} ${gbulan[bln - 1]} ${thn}`;document.getElementById("hijri").innerText = `Tanggal Hijriah : ${hari} ${cbulan[bulan - 1]} ${tahun} H`;}// Jalankan saat halaman dibukakonversiMasehiKeHijriah();</script></body></html>
Hasil :
11. PHP
Program Konversi Penanggalan Hijriah dengan PHP :
<?phpecho "KONVERSI TANGGAL MASEHI → HIJRIAH\n\n";$cbulan = ["Muharram", "Shafar", "Rabiul Awal", "Rabiul Akhir","Jumadil Awal", "Jumadil Akhir", "Rajab", "Syaban","Ramadhan", "Syawal", "Dzulkaidah", "Dzulhijjah"];$gbulan = ["Januari", "Februari", "Maret", "April", "Mei", "Juni","Juli", "Agustus", "September", "Oktober", "November", "Desember"];// Ambil tanggal sekarang$thn = (int)date("Y");$bln = (int)date("n");$tgl = (int)date("j");// Hitung Julian Day Numberif (($thn > 1582) || (($thn == 1582) && ($bln > 10)) || (($thn == 1582) && ($bln == 10) && ($tgl > 14))) {$zjd = intdiv(1461 * ($thn + 4800 + intdiv(($bln - 14), 12)), 4)+ intdiv(367 * ($bln - 2 - 12 * intdiv(($bln - 14), 12)), 12)- intdiv(3 * intdiv(($thn + 4900 + intdiv(($bln - 14), 12)), 100), 4)+ $tgl - 32075;} else {$zjd = 367 * $thn- intdiv(7 * ($thn + 5001 + intdiv(($bln - 9), 7)), 4)+ intdiv(275 * $bln, 9)+ $tgl + 1729777;}// Konversi ke Hijriah$zl = $zjd - 1948440 + 10632;$zn = intdiv(($zl - 1), 10631);$zl = $zl - 10631 * $zn + 354;$zj = intdiv(intdiv((10985 - $zl), 5316) * intdiv((50 * $zl), 17719)+ intdiv($zl, 5670) * intdiv((43 * $zl), 15238), 1);$zl = $zl- intdiv(intdiv((30 - $zj), 15) * intdiv((17719 * $zj), 50), 1)- intdiv(intdiv($zj, 16) * intdiv((15238 * $zj), 43), 1)+ 29;$bulan = intdiv(24 * $zl, 709);$hari = $zl - intdiv(709 * $bulan, 24);$tahun = 30 * $zn + $zj - 30;// Validasi agar tidak keluar dari arrayif ($bulan < 1) $bulan = 1;if ($bulan > 12) $bulan = 12;// Cetak hasilecho "Tanggal Masehi (Gregorian) : $tgl " . $gbulan[$bln - 1] . " $thn\n";echo "Tanggal Hijriah : $hari " . $cbulan[$bulan - 1] . " $tahun H\n";?>
PERHITUNGAN SISTEM PENANGGALAN DENGAN HIJRIAH
1. Source Codes (Text-Based)
1. Python
Program Tanggal dan Waktu dengan Penanggalan Hijriah menggunakan Python :
import datetimeimport mathdef konversi_hijriah():cbulan = ["Muharram", "Shafar", "Rabiul Awal", "Rabiul Akhir", "Jumadil Awal","Jumadil Akhir", "Rajab", "Syaban", "Ramadhan", "Syawal","Dzulkaidah", "Dzulhijjah"]gbulan = ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli","Agustus", "September", "Oktober", "November", "Desember"]print("KONVERSI TANGGAL MASEHI-HIJRIAH")print("=" * 45)# --- Ambil tanggal hari ini ---today = datetime.date.today()thn = today.yearbln = today.monthtgl = today.day# --- Hitung Julian Day Number (JDN) ---if (thn > 1582) or ((thn == 1582) and (bln > 10)) or ((thn == 1582) and (bln == 10) and (tgl > 14)):zjd = math.floor((1461 * (thn + 4800 + ((bln - 14) / 12))) / 4 +(367 * (bln - 2 - 12 * ((bln - 14) / 12))) / 12 -(3 * ((thn + 4900 + ((bln - 14) / 12)) / 100)) / 4 +tgl - 32075)else:zjd = math.floor(367 * thn - ((7 * (thn + 5001 + ((bln - 9) / 7))) / 4) +((275 * bln) / 9) + tgl + 1729777)# --- Konversi ke Hijriah ---zl = int(zjd - 1948440 + 10632)zn = int((zl - 1) / 10631)zl = int(zl - 10631 * zn + 354)zj = int(((10985 - zl) // 5316) * (((50 * zl) // 17719)) + ((zl // 5670)) * ((43 * zl) // 15238))zl = int(zl - (((30 - zj) // 15)) * (((17719 * zj) // 50)) -((zj // 16)) * (((15238 * zj) // 43)) + 29)blnHijri = (24 * zl) // 709tglHijri = zl - ((709 * blnHijri) // 24)tahunHijri = 30 * zn + zj - 30# --- Hitung hari ke dan persentase dalam tahun Hijriah ---# Tahun kabisat Hijriah: 11 tahun kabisat dalam 30 tahun → 355 hari# Rumus: tahun mod 30 ∈ {2,5,7,10,13,16,18,21,24,26,29}kabisat_hijri = tahunHijri % 30 in [2, 5, 7, 10, 13, 16, 18, 21, 24, 26, 29]total_hari_hijri = 355 if kabisat_hijri else 354# Perkiraan hari ke dalam tahun Hijriah (berdasarkan bulan dan tanggal)hari_ke_hijri = 0for i in range(blnHijri - 1):if i % 2 == 0: # bulan ganjil = 30 harihari_ke_hijri += 30else: # bulan genap = 29 harihari_ke_hijri += 29hari_ke_hijri += tglHijripersen_hijri = (hari_ke_hijri / total_hari_hijri) * 100sisa_hari = total_hari_hijri - hari_ke_hijripersen_mundur = 100 - persen_hijri# --- Output hasil ---print(f"Tanggal Masehi/Gregorian : {tgl} {gbulan[bln - 1]} {thn}")print(f"Tanggal Hijriah : {tglHijri} {cbulan[blnHijri - 1]} {tahunHijri} H")print(f"Tahun Hijriah Kabisat : {'Ya' if kabisat_hijri else 'Tidak'}")print(f"Hari ke (Kalender Hijriah): {hari_ke_hijri} dari {total_hari_hijri} hari")print(f"Sisa Hari (Tahun depan) : {sisa_hari} hari")print(f"Persentase dalam Tahun : {persen_hijri:.6f}%")print(f"Persentase Hitung Mundur : {persen_mundur:.6f}%")print()print(f"Day-{hari_ke_hijri} ({persen_hijri:.4f}%)")print("=" * 45)if __name__ == "__main__":konversi_hijriah()
2. Ruby
Program Tanggal dan Waktu dengan Penanggalan Hijriah menggunakan Ruby :
https://www.blogger.com/blog/page/edit/2490536221435885189/3537280352693159859
Untuk melihat Source Code yang Penanggalan Umum, silakan lihat di sini.