将公历日期转换为Hijri日期

FuN*_*uNk 15 javascript date date-conversion gregorian-calendar hijri

如何使用JavaScript将Gregorian date转换为Islamic Hijri date?

Lix*_*xas 19

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;
}
Run Code Online (Sandbox Code Playgroud)

这会将当前计算机日期转换为hijri.通过一些修改,您可以实现此片段将任何日期更改为伊斯兰

document.write(writeIslamicDate(1));
Run Code Online (Sandbox Code Playgroud)

取自本网站


Zak*_*ria 6

如果您只需要从公历日期(Miladi 日期)转换而来的回历日期年份,您可以简单地在 JavaScript 中编写以下等式:

\n
var GregorianYear = (new Date()).getFullYear();\nvar HijriYear = Math.round((GregorianYear - 622) * (33 / 32));\n
Run Code Online (Sandbox Code Playgroud)\n

您可以在母版页的页脚中使用这个简单的方程,例如\n\xd9\x83\xd9\x84 \xd8\xa7\xd9\x84\xd8\xad\xd9\x82\xd9\x88\xd9\x82 \xd9\ x85\xd8\xad\xd9\x81\xd9\x88\xd8\xb7\xd8\xa9 \xd9\x84\xd9\x80 ... \xc2\xa9

\n
<script type="text/javascript">document.write((new Date()).getFullYear())</script> \xd9\x85 - <script type="text/javascript">var y = (new Date()).getFullYear();var h = Math.round((y - 622) * (33 / 32));document.write(h)</script> \xd9\x87\xd9\x80\n
Run Code Online (Sandbox Code Playgroud)\n

你将得到:\n\xd9\x83\xd9\x84\xd8\xa7\xd9\x84\xd8\xad\xd9\x82\xd9\x88\xd9\x82\xd9\x85\xd8\xad\xd9\x81 \xd9\x88\xd8\xb7\xd8\xa9 \xd9\x84\xd9\x80 ... \xc2\xa9 2014 \xd9\x85 - 1435 \xd9\x87\xd9\x80

\n

您还可以使用嵌入在 asp 页面中的 C#:

\n
<%= DateTime.Now.Year %> - <%=  Math.Round((DateTime.Now.Year - 622) * 1.03125) %>\n
Run Code Online (Sandbox Code Playgroud)\n

将回归:2014 - 1436

\n

最后,如果您需要转换为 UmAlQura 日期,只需尝试以下代码行:

\n
let _date = new Date('7/10/2019').toLocaleDateString('ar-SA').format('DD/MM/YYYY');\n\nconsole.log(_date);\n
Run Code Online (Sandbox Code Playgroud)\n

将返回:\xd9\xa7\xe2\x80\x8f/\xd9\xa1\xd9\xa1\xe2\x80\x8f/\xd9\xa1\xd9\xa4\xd9\xa4\xd9\xa0\xd9\x87\ xd9\x80

\n

更新(2021-10-11):如果您需要更精确的方程,您必须通过以下公式知道太阳年的当前日期:

\n
var now = new Date();\nvar start = new Date(now.getFullYear(), 0, 0);\nvar diff = now - start;\nvar oneDay = 1000 * 60 * 60 * 24;\nvar dayOfYear = Math.floor(diff / oneDay);\n
Run Code Online (Sandbox Code Playgroud)\n

然后您可以通过以下公式获得回历年份:

\n
HijriYear = ((GregorianYear-621.5643)*365.24225 + dayOfYear) / 354.36707\n
Run Code Online (Sandbox Code Playgroud)\n

在哪里 :

\n

365.24225是太阳年的天数。

\n

354.36707是农历年的天数。

\n

621.5643是回历的准确公历日期(回历日期的开始日期)

\n

回历年份 = ((2021-621.5643)*365.24225 + 284) / 354.36707 = 1,443.18444

\n

因此,当前回历年份是1443Math.floor(HijriYear)

\n

您也可以使用分数:

\n
var hijriDayOfYear  = (HijriYear - Math.floor(HijriYear)) * 354.36707\n
Run Code Online (Sandbox Code Playgroud)\n

0.18444乘以354.36707即可得到回历中的天数:

\n

0.18444 * 354.36707 = 65.3 :当前回历年的天数

\n

Math.ceil(hijriDayOfYear / 29.530589) = 3当前回历月份数

\n

Math.floor(hijriDayOfYear % 29.530589) = 6 \xc2\xb1 1该回历月份的天数

\n

最后总结一下前面的所有内容,只需使用以下 JS 代码:

\n
var now = new Date()\nvar dayOfYear = Math.floor((new Date() - new Date(now.getFullYear(), 0, 0)) / (1000 * 60 * 60 * 24))\nvar hijriDate = ((now.getFullYear()-621.5643)*365.24225 + dayOfYear) / 354.36707\nvar hijriYear = Math.floor(hijriDate)\nvar hijriMonth = Math.ceil((hijriDate - Math.floor(hijriDate)) * 354.36707 / 29.530589)\nvar hijriDay = Math.floor((hijriDate - Math.floor(hijriDate)) * 354.36707 % 29.530589)\n    \nconsole.log(`${hijriYear}/${hijriMonth}/${hijriDay}`)\n
Run Code Online (Sandbox Code Playgroud)\n

控制台输出示例:1443/3/6

\n

将日期时间转换为回历日期的通用 JavaScript 函数:

\n
function GetHijriDate(dateTime) {    \n    var dayOfYear = Math.floor((dateTime - new Date(dateTime.getFullYear(), 0, 0)) / (1000 * 60 * 60 * 24))\n    var hijriDate = ((dateTime.getFullYear() - 621.5643) * 365.24225 + dayOfYear) / 354.36707\n    var hijriYear = Math.floor(hijriDate)\n    var hijriMonth = Math.ceil((hijriDate - Math.floor(hijriDate)) * 354.36707 / 29.530589)\n    var hijriDay = Math.floor((hijriDate - Math.floor(hijriDate)) * 354.36707 % 29.530589)\n    return [hijriYear, hijriMonth , hijriDay]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在 C# 中:

\n
    /// <summary>\n    /// Gets the hijri date.\n    /// </summary>\n    /// <param name="date">The date.</param>\n    /// <returns></returns>\n    public static int[] GetHijriDate(DateTime date)\n    {\n        var yearOfHijra = 621.5643f;\n        var daysInSolarYear = 365.24225f;\n        var daysInLunarYear = 354.36707f;\n        var daysInLunarMonth = 29.53058f;\n\n        var hijriDate = ((date.Year - yearOfHijra) * daysInSolarYear  + date.DayOfYear) / daysInLunarYear;\n        var hijriYear = (int)Math.Floor(hijriDate);\n        var hijriMonth = (int)Math.Ceiling((hijriDate - Math.Floor(hijriDate)) * daysInLunarYear / daysInLunarMonth);\n        var hijriDay = (int)Math.Floor((hijriDate - Math.Floor(hijriDate)) * daysInLunarYear % daysInLunarMonth);\n\n        int[] hijriDateRes = new int[3];\n        hijriDateRes[0] = hijriYear;\n        hijriDateRes[1] = hijriMonth;\n        hijriDateRes[2] = hijriDay;\n\n        return hijriDateRes;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

或者简单地:

\n
console.log(new Date().toLocaleDateString('ar-SA'))\n
Run Code Online (Sandbox Code Playgroud)\n

'\xd9\xa5\xe2\x80\x8f/\xd9\xa3\xe2\x80\x8f/\xd9\xa1\xd9\xa4\xd9\xa4\xd9\xa3\xd9\x87\xd9\x80'

\n


m.s*_*han 6

查看我的图书馆hijrah-date它是 Hijrah 日历系统中的 Javascript 日期。

它还支持回历到公历以及公历到回历的转换。除了日期格式之外。