如何使用 JavaScript 将公历日期转换为伊斯兰回历日期?
原文由 FuNk 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您只需要从公历日期(Miladi 日期)转换的回历年,您可以简单地用 javascript 编写此等式:
var GregorianYear = (new Date()).getFullYear();
var HijriYear = Math.round((GregorianYear - 622) * (33 / 32));
你可以在母版页的页脚中使用这个简单的等式,比如
<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> هـ
你会得到: كل الحقوق محفوط لـ … © 2014 م - 1435 هـ
您还可以使用嵌入在 asp 页面中的 C# 作为:
<%= DateTime.Now.Year %> - <%= Math.Round((DateTime.Now.Year - 622) * 1.03125) %>
回归时间:2014 - 1436
最后,如果您需要转换为 UmAlQura 日期,只需尝试这行代码:
let _date = new Date('7/10/2019').toLocaleDateString('ar-SA').format('DD/MM/YYYY');
console.log(_date);
将返回:٧ /١١ /١٤٤٠ هـ
更新(2021-10-11):如果您需要更精确的方程式,则必须通过以下公式知道太阳年的当前日期:
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);
然后你可以通过这个公式得到回历年:
HijriYear = ((GregorianYear-621.5643)*365.24225 + dayOfYear) / 354.36707
在哪里 :
365.24225 是太阳年的天数。
354.36707 是农历年的天数。
621.5643 是 Hijra 的确切公历日期(Hijri 日期的开始日期)
回历年 = ((2021-621.5643)*365.24225 + 284) / 354.36707 = 1,443.18444
因此,通过使用 Math.floor(HijriYear)
函数,当前回历年是 1443 年。
您也可以使用分数:
var hijriDayOfYear = (HijriYear - Math.floor(HijriYear)) * 354.36707
0.18444 乘以 354.36707 得到回历中的天数:
0.18444 * 354.36707 = 65.3 :当前回历年的天数
Math.ceil(hijriDayOfYear / 29.530589) = 3
当前回历月数
Math.floor(hijriDayOfYear % 29.530589) = 6 ± 1
回历月的天数
最后总结一下之前的所有内容,只需使用以下 JS 代码:
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}`)
控制台输出示例:1443/3/6
将日期时间转换为回历日期的通用 JavaScript 函数:
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]
}
在 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;
}
或者简单地:
console.log(new Date().toLocaleDateString('ar-SA'))
‘٥ /٣ /١٤٤٣ هـ’
原文由 Zakaria 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
这会将 当前 计算机日期转换为回历。稍作修改,您就可以实现此代码段将任何日期更改为伊斯兰日期
取自 本站