Hijri Date Time Source Codes

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 ini
    time_t now = time(NULL);
    struct tm *ltm = localtime(&now);

    thn = 1900 + ltm->tm_year;   // Tahun
    bln = 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 Hijriah
    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;

    // Output hasil
    printf("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 ini
    time_t now = time(0);
    tm *ltm = localtime(&now);

    thn = 1900 + ltm->tm_year;   // tahun
    bln = 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 Hijriah
    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;

    // Output hasil
    cout << "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 Number
        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 Hijriah
        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;

        // Output
        Console.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 datetime
import math

def 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.year
    bln = today.month
    tgl = today.day

    zjd, zl, zn, zj, hari, tahun, bulan = 0, 0, 0, 0, 0, 0, 0

    if (thn > 1582) or ((thn == 1582) and (bln > 10)) or ((thn == 1582) and (bln == 10) and (tgl > 14)):
        # Gregorian Calendar
        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:
        # Julian Calendar
        zjd = 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) // 709
    hari = 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_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"
  ]

  puts "KONVERSI TANGGAL MASEHI-HIJRIAH"

  # --- Mengambil Tanggal Masehi Saat Ini ---
  today = Date.today
  thn = today.year
  bln = today.month
  tgl = today.day

  zjd = 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 - 32075
  else
    zjd = 367 * thn -
          ((7 * (thn + 5001 + ((bln - 9) / 7.0))) / 4.0) +
          ((275 * bln) / 9.0) + tgl + 1729777
  end

  zjd = zjd.floor

  # --- Konversi Hari Julian ke Tanggal Hijriah ---
  zl = (zjd - 1948440 + 10632).to_i
  zn = ((zl - 1) / 10631).to_i
  zl = (zl - 10631 * zn + 354).to_i

  zj = (((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_i

  bulan = ((24 * zl) / 709).to_i
  hari = zl - ((709 * bulan) / 24).to_i
  tahun = 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 program
konversi_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 sekarang
  DateTime 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 Number
  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;

  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 main

import (
    "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 ini
    now := 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 Number
    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 Julian ke Hijriah
    zl = zjd - 1948440 + 10632
    zn = (zl - 1) / 10631
    zl = zl - 10631*zn + 354
    zj = ((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)) - 29

    bulan = (24 * zl) / 709
    hari = zl - ((709 * bulan) / 24)
    tahun = 30*zn + zj - 30

    fmt.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 datetime
import math

def 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.year
    bln = today.month
    tgl = today.day

    zjd, zl, zn, zj, hari, tahun, bulan = 0, 0, 0, 0, 0, 0, 0

    if (thn > 1582) or ((thn == 1582) and (bln > 10)) or ((thn == 1582) and (bln == 10) and (tgl > 14)):
        # Gregorian Calendar
        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:
        # Julian Calendar
        zjd = 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) // 709
    hari = 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 Hijriah
        zl = 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 HTML
        document.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 dibuka
      konversiMasehiKeHijriah();
    </script>
  </body>
</html>

Hasil : 



11. PHP

Program Konversi Penanggalan Hijriah dengan PHP :

<?php
echo "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 Number
if (($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 array
if ($bulan < 1) $bulan = 1;
if ($bulan > 12) $bulan = 12;

// Cetak hasil
echo "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 datetime
import math

def 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.year
    bln = today.month
    tgl = 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) // 709
    tglHijri = 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 = 0
    for i in range(blnHijri - 1):
        if i % 2 == 0:  # bulan ganjil = 30 hari
            hari_ke_hijri += 30
        else:           # bulan genap = 29 hari
            hari_ke_hijri += 29
    hari_ke_hijri += tglHijri

    persen_hijri = (hari_ke_hijri / total_hari_hijri) * 100
    sisa_hari = total_hari_hijri - hari_ke_hijri
    persen_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.

Post a Comment