21

JavaScript を使用してグレゴリオ暦の日付をイスラム暦の日付に変換するにはどうすればよいですか?

4

4 に答える 4

24
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;
}

これにより、現在のコンピューターの日付がイスラム暦に変換されます。そして、少し変更するだけで、このスニペットが任意の日付をイスラムに変更することができます

document.write(writeIslamicDate(1));

このサイトから取得

于 2011-03-03T07:07:45.390 に答える
6

グレゴリオ暦 (ミラディ暦) から変換されたヒジュラ暦の年のみが必要な場合は、次の式を 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> هـ

あなたは得るでしょう:

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はヒジュラの正確なグレゴリオ暦の日付です (ヒジュラ日付の開始日)

イスラム暦 = ((2021-621.5643)*365.24225 + 284) / 354.36707 = 1,443.18444

したがって、関数を使用すると、現在のイスラム暦は1443 年Math.floor(HijriYear)になります。

分数を使用することもできます:

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

datetime をイスラム暦の日付に変換する一般的な 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'))

'٥ /٣ /١٤٤٣ 아ـ'

于 2014-08-08T15:49:32.353 に答える
5

Hijrahカレンダー システムの Javascript 日付である私のライブラリhijrah-dateをチェックしてください。

また、ヒジュラーからグレゴリオ暦、グレゴリオ暦からヒジュラーへの変換もサポートしています。日付の書式設定に加えて。

于 2016-10-18T16:42:00.337 に答える