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)
取自本网站
如果您只需要从公历日期(Miladi 日期)转换而来的回历日期年份,您可以简单地在 JavaScript 中编写以下等式:
\nvar GregorianYear = (new Date()).getFullYear();\nvar HijriYear = Math.round((GregorianYear - 622) * (33 / 32));\nRun 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\nRun 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) %>\nRun Code Online (Sandbox Code Playgroud)\n将回归:2014 - 1436
\n最后,如果您需要转换为 UmAlQura 日期,只需尝试以下代码行:
\nlet _date = new Date('7/10/2019').toLocaleDateString('ar-SA').format('DD/MM/YYYY');\n\nconsole.log(_date);\nRun 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):如果您需要更精确的方程,您必须通过以下公式知道太阳年的当前日期:
\nvar 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);\nRun Code Online (Sandbox Code Playgroud)\n然后您可以通过以下公式获得回历年份:
\nHijriYear = ((GregorianYear-621.5643)*365.24225 + dayOfYear) / 354.36707\nRun Code Online (Sandbox Code Playgroud)\n在哪里 :
\n365.24225是太阳年的天数。
\n354.36707是农历年的天数。
\n621.5643是回历的准确公历日期(回历日期的开始日期)
\n回历年份 = ((2021-621.5643)*365.24225 + 284) / 354.36707 = 1,443.18444
\n因此,当前回历年份是1443年Math.floor(HijriYear)。
您也可以使用分数:
\nvar hijriDayOfYear = (HijriYear - Math.floor(HijriYear)) * 354.36707\nRun Code Online (Sandbox Code Playgroud)\n0.18444乘以354.36707即可得到回历中的天数:
\n0.18444 * 354.36707 = 65.3 :当前回历年的天数
\nMath.ceil(hijriDayOfYear / 29.530589) = 3当前回历月份数
Math.floor(hijriDayOfYear % 29.530589) = 6 \xc2\xb1 1该回历月份的天数
最后总结一下前面的所有内容,只需使用以下 JS 代码:
\nvar 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}`)\nRun Code Online (Sandbox Code Playgroud)\n控制台输出示例:1443/3/6
\n将日期时间转换为回历日期的通用 JavaScript 函数:
\nfunction 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}\nRun 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 }\nRun Code Online (Sandbox Code Playgroud)\n或者简单地:
\nconsole.log(new Date().toLocaleDateString('ar-SA'))\nRun 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| 归档时间: |
|
| 查看次数: |
21252 次 |
| 最近记录: |