How do you convert Gregorian dates to Islamic Hijri dates using JavaScript?
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;
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;
}
This converts current computer date to hijri. And with a little modification you can achieve that this snippet change any date to islamic
document.write(writeIslamicDate(1));
Taken from This site
If you need only the year of Hijri date converted from Gregorian date (Miladi date) you can simply write this equation in javascript:
var GregorianYear = (new Date()).getFullYear();
var HijriYear = Math.round((GregorianYear - 622) * (33 / 32));
you can use this simple equation in the footer in master page like كل الحقوق محفوطة لـ ... ©
<script type="text/javascript">document.write((new Date()).getFullYear())</script> م - <script type="text/javascript">var y = (new Date()).getFullYear();var h = Math.round((y - 622) * (33 / 32));document.write(h)</script> هـ
you will get: كل الحقوق محفوطة لـ ... © 2014 م - 1435 هـ
you can also use C# embedded in asp page as:
<%= DateTime.Now.Year %> - <%= Math.Round((DateTime.Now.Year - 622) * 1.03125) %>
will return : 2014 - 1436
Finally, if you need to convert to UmAlQura date, simply try this line of code:
let _date = new Date('7/10/2019').toLocaleDateString('ar-SA').format('DD/MM/YYYY');
console.log(_date);
will return : ٧/١١/١٤٤٠ هـ
Update (2021-10-11) : If you need a more precise equation you have to know the current day of solar year by this formula :
var now = new Date();
var start = new Date(now.getFullYear(), 0, 0);
var diff = now - start;
var oneDay = 1000 * 60 * 60 * 24;
var dayOfYear = Math.floor(diff / oneDay);
Then you can get the Hijri year by this formula:
HijriYear = ((GregorianYear-621.5643)*365.24225 + dayOfYear) / 354.36707
Where :
365.24225 is the number of days in solar year.
354.36707 is the number of days in lunar year.
621.5643 is the exact Gregorian date of Hijra (start date of Hijri date)
HijriYear = ((2021-621.5643)*365.24225 + 284) / 354.36707 = 1,443.18444
So the current Hijri year is 1443 by using Math.floor(HijriYear)
function.
Also you can use the fraction :
var hijriDayOfYear = (HijriYear - Math.floor(HijriYear)) * 354.36707
0.18444 multiplied by 354.36707 to get the number of days in Hijri calendar :
0.18444 * 354.36707 = 65.3 : the number of day in this current Hijri year
Math.ceil(hijriDayOfYear / 29.530589) = 3
number of current Hijri month
Math.floor(hijriDayOfYear % 29.530589) = 6 ± 1
number of day in this Hijri month
Finally to summarize all of previous just use the following JS code:
var now = new Date()
var dayOfYear = Math.floor((new Date() - new Date(now.getFullYear(), 0, 0)) / (1000 * 60 * 60 * 24))
var hijriDate = ((now.getFullYear()-621.5643)*365.24225 + dayOfYear) / 354.36707
var hijriYear = Math.floor(hijriDate)
var hijriMonth = Math.ceil((hijriDate - Math.floor(hijriDate)) * 354.36707 / 29.530589)
var hijriDay = Math.floor((hijriDate - Math.floor(hijriDate)) * 354.36707 % 29.530589)
console.log(`${hijriYear}/${hijriMonth}/${hijriDay}`)
console output sample : 1443/3/6
General JavaScript Function to convert datetime to Hijri date:
function GetHijriDate(dateTime) {
var dayOfYear = Math.floor((dateTime - new Date(dateTime.getFullYear(), 0, 0)) / (1000 * 60 * 60 * 24))
var hijriDate = ((dateTime.getFullYear() - 621.5643) * 365.24225 + dayOfYear) / 354.36707
var hijriYear = Math.floor(hijriDate)
var hijriMonth = Math.ceil((hijriDate - Math.floor(hijriDate)) * 354.36707 / 29.530589)
var hijriDay = Math.floor((hijriDate - Math.floor(hijriDate)) * 354.36707 % 29.530589)
return [hijriYear, hijriMonth , hijriDay]
}
In C# :
/// <summary>
/// Gets the hijri date.
/// </summary>
/// <param name="date">The date.</param>
/// <returns></returns>
public static int[] GetHijriDate(DateTime date)
{
var yearOfHijra = 621.5643f;
var daysInSolarYear = 365.24225f;
var daysInLunarYear = 354.36707f;
var daysInLunarMonth = 29.53058f;
var hijriDate = ((date.Year - yearOfHijra) * daysInSolarYear + date.DayOfYear) / daysInLunarYear;
var hijriYear = (int)Math.Floor(hijriDate);
var hijriMonth = (int)Math.Ceiling((hijriDate - Math.Floor(hijriDate)) * daysInLunarYear / daysInLunarMonth);
var hijriDay = (int)Math.Floor((hijriDate - Math.Floor(hijriDate)) * daysInLunarYear % daysInLunarMonth);
int[] hijriDateRes = new int[3];
hijriDateRes[0] = hijriYear;
hijriDateRes[1] = hijriMonth;
hijriDateRes[2] = hijriDay;
return hijriDateRes;
}
Or Simply :
console.log(new Date().toLocaleDateString('ar-SA'))
'٥/٣/١٤٤٣ هـ'
Checkout my library hijrah-date which is a Javascript date in the Hijrah calendar system.
It also supports Hijrah to Gregorian and Gregorian to Hijrah conversion. In addition to date formatting.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With