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). 




KONVERSI KALENDER MASEHI-HIJRIAH



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. 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