2015-05-25 27 views
1

我想自动适应或生成从格里高里到Hijri的一年中的几天。我如何生成某个阳历的日期到Hijri

我的意思是你要选择或写出年为例:

选择2015年:

  • 获取的2015年阳历然后将其转换所有天Hijrim并提交名单回历。

所以要回到2列表列表1 gregoriad天名单VS另一个列表2 hijhri

我想这在JavaScript和使用剑道的UI框架,以查看它。

+0

的转换是回历日期始终与公历一样吗?我的意思是1770年1月1日的两个日期,以及2015年同一日期的两个日期? – Ruchan

+0

例如对于一天是25/5/2015格里高利然后在hijri是6 sha3ban 1436 – Danyal

+0

你有你已经尝试过的东西,迄今为止,不工作的示例代码? – Kmeixner

回答

1

Kendo UI不支持Hirji日历。

+0

你可以实现没有剑道UI – Danyal

+0

你可以使用angularjs – Danyal

3

Kendo UI only支持Gregorian calendar。似乎没有计划添加任何其他人。

您可以使用.NET来转换日期。

public string ConvertDateCalendar(DateTime DateConv, ECalenderTypes calendar, string DateLangCulture) 
{ 
    System.Globalization.DateTimeFormatInfo DTFormat; 
    DateLangCulture = DateLangCulture.ToLower(); 
    /// We can't have the hijri date writen in English. We will get a runtime error 

    if (calendar == ECalenderTypes.Hijri && DateLangCulture.StartsWith("en-")) 
    { 
     DateLangCulture = "ar-sa"; 
    } 

    /// Set the date time format to the given culture 
    DTFormat = new System.Globalization.CultureInfo(DateLangCulture, false).DateTimeFormat; 

    /// Set the calendar property of the date time format to the given calendar 
    switch (calendar) 
    { 
     case ECalenderTypes.Hijri: 
      DTFormat.Calendar = new System.Globalization.HijriCalendar(); 
      break; 

     case ECalenderTypes.Gregorian: 
      DTFormat.Calendar = new System.Globalization.GregorianCalendar(); 
      break; 

     default: 
      return ""; 
    } 

    /// We format the date structure to whatever we want 
    DTFormat.ShortDatePattern = "dd/MM/yyyy"; 
    return (DateConv.Date.ToString("f", DTFormat)); 
} 

然后:

ConvertDateCalendar("01/01/2015", ECalenderTypes.Gregorian, "en-US"); 
ConvertDateCalendar("01/01/2015", ECalenderTypes.Hijri, "en-US"); 

的JavaScript

function gmod(n,m){ 
    return ((n%m)+m)%m; 
} 
function getDate(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 writeHijriDate(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 = getDate(adjustment); 
    var outputHijriDate = wdNames[iDate[4]] + ", " + iDate[5] + " " + iMonthNames[iDate[6]] + " " + iDate[7] + " AH"; 
    return outputHijriDate; 
} 

用法(转换当前日期):

writeHijriDate(1); 
+0

谢谢,但我不喜欢使用.net。 – Danyal

+0

啊,我错过了。 :)我也添加了一些JavaScript代码。 – Nicholas