Konversi Tanggal Masehi Ke Hijriah ( C++ )

Bismillah..

Berikut iseng-iseng buat fungsi konversi tanggal masehi ke tanggal hijriah dengan bahasa C++. Sourcenya saya adopsi dari https://github.com/GeniusTS/hijri-dates , kalo kode dari sumbernya menggunakan bahasa PHP tapi oleh saya diconvert dan dioprek kedalam bahasa C++ (karena ada suatu keperluan juga 😀 )

Sudah saya coba dan Alhamdulillah berhasil.

*Sedikit catatan dalam kode :
parameter adj digunakan untuk koreksi waktu, jika suatu saat butuh di kurangin satu hari jadi tinggal diberi nilai (-1), atau butuh ditambah 1 maka cukup diberi nilai (1).

#include <iostream>
#include <math.h>
#include <string>
using namespace std;

string mname[] = {"Muharam","Safar",
"Rabiul Awal","Rabiul Akhir","Jumadil Ula",
"Jumadil Akhir","Rajab","Sya'ban","Ramadhan",
"Syawal","Dzulqa'dah","Dzulhijjah"
};

void convert_hijri(int year,int month,int day,int adj, int result[]){
    if (month < 3)
    {
        year -= 1;
        month += 12;
    }
    double a = floor(year / 100.0);
    double b = (year == 1582 && (month > 10 || (month == 10 && day > 4)) ? -10 :
        (year == 1582 && month == 10 ? 0 :
            (year < 1583 ? 0 : 2 - a + floor(a / 4.0))));
    double julian = floor(365.25 * (year + 4716)) + floor(30.6001 * 
(month + 1)) + day + b - 1524;
    
    julian=julian+adj;
    
    double y = 10631.0 / 30.0;
    double epochAstro = 1948084;
    double shift1 = 8.01 / 60.0;
    double z = julian - epochAstro;
    double cyc = floor(z / 10631.0);
    z = z - 10631 * cyc;
    double j = floor((z - shift1) / y);
    z = z - floor(j * y + shift1);
    int hyear = 30 * cyc + j;
    int hmonth = (int)floor((z + 28.5001) / 29.5);
    if (hmonth == 13)
    {
        hmonth = 12;
    }
    int hday = z - floor(29.5001 * hmonth - 29);
    result[0] = hday;
    result[1] = hmonth;
    result[2] = hyear;
}

int main()
{
    int hijri[3];
    // parameter : tahun, bulan, tanggal, koreksi, variabel penampung
    convert_hijri(2019,3,26,0,hijri);
    cout<<hijri[0]<<" "<<mname[hijri[1]-1]<<" "<<hijri[2];
    return 0;
}