gregorianToHijri method
Implementation
UmmAlquraCalendar gregorianToHijri(pYear, pMonth, pDay) {
//This code the modified version of R.H. van Gent Code, it can be found at http://www.staff.science.uu.nl/~gent0113/islam/ummalqura.htm
// read calendar data
var day = (pDay);
var month =
(pMonth); // -1; // Here we enter the Index of the month (which starts with Zero)
var year = (pYear);
var m = month;
var y = year;
// append January and February to the previous year (i.e. regard March as
// the first month of the year in order to simplify leapday corrections)
if (m < 3) {
y -= 1;
m += 12;
}
// determine offset between Julian and Gregorian calendar
var a = (y / 100).floor();
var jgc = a - (a / 4.0).floor() - 2;
// compute Chronological Julian Day Number (CJDN)
var cjdn = (365.25 * (y + 4716)).floor() +
(30.6001 * (m + 1)).floor() +
day -
jgc -
1524;
a = ((cjdn - 1867216.25) / 36524.25).floor();
jgc = a - (a / 4.0).floor() + 1;
var b = cjdn + jgc + 1524;
var c = ((b - 122.1) / 365.25).floor();
var d = (365.25 * c).floor();
month = ((b - d) / 30.6001).floor();
day = (b - d) - (30.6001 * month).floor();
if (month > 13) {
c += 1;
month -= 12;
}
month -= 1;
year = c - 4716;
// compute Modified Chronological Julian Day Number (MCJDN)
var mcjdn = cjdn - 2400000;
// the MCJDN's of the start of the lunations in the Umm al-Qura calendar are stored in 'islamcalendar_dat.js'
var i;
for (i = 0; i < ummAlquraDateArray.length; i++) {
if (_ummalquraDataIndex(i) > mcjdn) break;
}
// compute and output the Umm al-Qura calendar date
var iln = i + 16260;
var ii = ((iln - 1) / 12).floor();
var iy = ii + 1;
var im = iln - 12 * ii;
var id = mcjdn - _ummalquraDataIndex(i - 1) + 1;
var ml = _ummalquraDataIndex(i) - _ummalquraDataIndex(i - 1);
lengthOfMonth = ml;
// int wd = this._gMod(cjdn + 1, 1);
var wd = _gMod(cjdn.toInt() + 1, 7);
wkDay = wd == 0 ? 7 : wd;
// print("week day is $wd");
return hDate(iy, im, id);
}