gregorianToHijri method

UmmAlquraCalendar gregorianToHijri(
  1. dynamic pYear,
  2. dynamic pMonth,
  3. dynamic pDay
)

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);
}