怎么把波斯日期转换成公历?

时间:2019-02-23 05:58:12

标签: javascript jquery

可以将波斯日期更改为公历吗?
例如,我有这个日期:1396-12-04,我想将其转换为2019-02-23

2 个答案:

答案 0 :(得分:1)

使用它:

JalaliDate = {
    g_days_in_month: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
    j_days_in_month: [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
};

JalaliDate.jalaliToGregorian = function(j_y, j_m, j_d) {
    j_y = parseInt(j_y);
    j_m = parseInt(j_m);
    j_d = parseInt(j_d);
    var jy = j_y - 979;
    var jm = j_m - 1;
    var jd = j_d - 1;

    var j_day_no = 365 * jy + parseInt(jy / 33) * 8 + parseInt((jy % 33 + 3) / 4);
    for (var i = 0; i < jm; ++i) j_day_no += JalaliDate.j_days_in_month[i];

    j_day_no += jd;

    var g_day_no = j_day_no + 79;

    var gy = 1600 + 400 * parseInt(g_day_no / 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
    g_day_no = g_day_no % 146097;

    var leap = true;
    if (g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
    {
        g_day_no--;
        gy += 100 * parseInt(g_day_no / 36524); /* 36524 = 365*100 + 100/4 - 100/100 */
        g_day_no = g_day_no % 36524;

        if (g_day_no >= 365) g_day_no++;
        else leap = false;
    }

    gy += 4 * parseInt(g_day_no / 1461); /* 1461 = 365*4 + 4/4 */
    g_day_no %= 1461;

    if (g_day_no >= 366) {
        leap = false;

        g_day_no--;
        gy += parseInt(g_day_no / 365);
        g_day_no = g_day_no % 365;
    }

    for (var i = 0; g_day_no >= JalaliDate.g_days_in_month[i] + (i == 1 && leap); i++)
    g_day_no -= JalaliDate.g_days_in_month[i] + (i == 1 && leap);
    var gm = i + 1;
    var gd = g_day_no + 1;

    gm = gm < 10 ? "0" + gm : gm;
    gd = gd < 10 ? "0" + gd : gd;

    return [gy, gm, gd];
}

示例:

var myDate = "1397-12-04",
dateSplitted = myDate.split("-"),
jD = JalaliDate.jalaliToGregorian( dateSplitted[0], dateSplitted[1],     dateSplitted[2] ),
jResult = jD[0] + "-" + jD[1] + "-" + jD[2];

console.log( jResult );

答案 1 :(得分:0)

有一个专门用于此的库:jalali-moment

它的步骤非常简单,并且有据可查。

  

此插件可在momentjs api上一起使用jalali和gregorian日历系统。

     

.locale('fa');它将使用jalali日历系统

     

.locale('任何其他语言环境');它将使用公历系统

您也可以按照此堆栈溢出answer中所述的方式进行操作。