Converting Gregorian date to Hijri date

前端 未结 3 961
情深已故
情深已故 2020-12-08 15:56

How do you convert Gregorian dates to Islamic Hijri dates using JavaScript?

相关标签:
3条回答
  • 2020-12-08 16:24

    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.

    0 讨论(0)
  • 2020-12-08 16:28
    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

    0 讨论(0)
  • 2020-12-08 16:37

    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 : ٧‏/١١‏/١٤٤٠ هـ

    0 讨论(0)
提交回复
热议问题