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; } function kuwaiticalendar(adjust){ var today = new Date(); if(adjust) { adjustmili = 1000*60*60*24*adjust; todaymili = today.getTime()+adjustmili; 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; if(adjust) { wd = gmod(jd+1-adjust,7)+1; } 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[0] = day; //calculated day (CE) myRes[1] = month-1; //calculated month (CE) myRes[2] = year; //calculated year (CE) myRes[3] = jd-1; //julian day number myRes[4] = wd-1; //weekday number myRes[5] = id; //islamic date myRes[6] = im-1; //islamic month myRes[7] = iy; //islamic year return myRes; } function writeIslamicDate(adjustment) { var wdNames = new Array("Ahad","Ithnin","Thulatha","Arbaa","Khams","Jumuah","Sabt"); var iMonthNames = new Array("Muharram","Safar","Rabi'ul Awwal","Rabi'ul Akhir", "Jumadal Ula","Jumadal Akhira","Rajab","Sha'ban", "Ramadan","Shawwal","Dhul Qa'ada","Dhul Hijja"); var iDate = kuwaiticalendar(adjustment); var outputIslamicDate = wdNames[iDate[4]] + ", " + iDate[5] + " " + iMonthNames[iDate[6]] + " " + iDate[7] + " AH"; return outputIslamicDate; }
Download Script
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());
Below is with date adjustment of 1 (advanced one day):
The code:
document.write(writeIslamicDate(1)); 

