javascript - 如何生成回历的某个公历年份的日期

标签 javascript c# kendo-ui calendar hijri

我想自动调整或生成一年中的几天,从公历到回历。

我的意思是你想选择或写年份作为例子:

选择2015年:

  • 获取 2015 年所有日期的公历,然后将其转换为回历并显示回历列表。

所以你想返回 2 list list1 gregoriad days list vs another list2 hijhri

我想在 JavaScript 中使用它并使用 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);

关于javascript - 如何生成回历的某个公历年份的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30434945/

相关文章:

javascript - 对 Vue 插件进行单元测试

c# - List<T> 真的是 C# 中的隐蔽数组吗?

kendo-ui - 如何为kendo ui下拉菜单设置默认值?

asp.net-mvc-3 - 列模板剑道ui网格mvc Action 链接

javascript - 拖放中 div 的条件

javascript - 悬停时突出显示多个表中的表行

C# Telnet 库

c# - 如何识别重叠日期范围的最大数量?

asp.net - Kendo UI 下拉列值未提交给 Controller

javascript - 来自 Node.JS(使用 express)服务器的跨域 jQuery.getJSON 在 Internet Explorer 中不起作用