## Javascript Formula to Calculate Islamic Hijri Dates

If you do not need fancy looking hijri calendar widget, or you want to style the calendar text by yourself, or you are a webmaster or a web developer that want to build your own hijri calendar web applications, then the following code may be of use.

The script (modified from Robert van Gent's page) calculates approximate hijri dates from current computer's date. It is based on arithmetical calculation to match the current moon phase. The calculation is based on 30-year lunar cycle where length of the lunar months is defined aternatingly as 29 or 30 days. Every two or three year an extra day is added at the end of the year to keep up with the phase of the moon. This formula is also similar to "Kuwaiti Algorithm" used by Microsoft to define Hijri Calendar dates.

``````
function gmod(n,m){
return ((n%m)+m)%m;
}

var today = new Date();
today = new Date(todaymili);
}
day = today.getDate();
month = today.getMonth();
year = today.getFullYear();
m = month+1;
y = year;
if(m<3) {
y -= 1;
m += 12;
}

a = Math.floor(y/100.);
b = 2-a+Math.floor(a/4.);
if(y<1583) b = 0;
if(y==1582) {
if(m>10)  b = -10;
if(m==10) {
b = 0;
if(day>4) b = -10;
}
}

jd = Math.floor(365.25*(y+4716))+Math.floor(30.6001*(m+1))+day+b-1524;

b = 0;
if(jd>2299160){
a = Math.floor((jd-1867216.25)/36524.25);
b = 1+a-Math.floor(a/4.);
}
bb = jd+b+1524;
cc = Math.floor((bb-122.1)/365.25);
dd = Math.floor(365.25*cc);
ee = Math.floor((bb-dd)/30.6001);
day =(bb-dd)-Math.floor(30.6001*ee);
month = ee-1;
if(ee>13) {
cc += 1;
month = ee-13;
}
year = cc-4716;

} else {
wd = gmod(jd+1,7)+1;
}

iyear = 10631./30.;
epochastro = 1948084;
epochcivil = 1948085;

shift1 = 8.01/60.;

z = jd-epochastro;
cyc = Math.floor(z/10631.);
z = z-10631*cyc;
j = Math.floor((z-shift1)/iyear);
iy = 30*cyc+j;
z = z-Math.floor(j*iyear+shift1);
im = Math.floor((z+28.5001)/29.5);
if(im==13) im = 12;
id = z-Math.floor(29.5001*im-29);

var myRes = new Array(8);

myRes = day; //calculated day (CE)
myRes = month-1; //calculated month (CE)
myRes = year; //calculated year (CE)
myRes = jd-1; //julian day number
myRes = wd-1; //weekday number
myRes = id; //islamic date
myRes = im-1; //islamic month
myRes = iy; //islamic year

return myRes;
}
var iMonthNames = new Array("Muharram","Safar","Rabi'ul Awwal","Rabi'ul Akhir",
var outputIslamicDate = wdNames[iDate] + ", "
+ iDate + " " + iMonthNames[iDate] + " " + iDate + " AH";
return outputIslamicDate;
}
``````

Here is the javascript code as .js file: hijricalendar-kuwaiti.js

### Example outputs

Below is example output of the above script (the writeIslamicDate function) without date adjustment:

The code:

``````
document.write(writeIslamicDate());
``````

The code:

``````
document.write(writeIslamicDate(1));
``````