如何在javascript中将格里高利日期更改为波斯日期

myn*_*ame 19 javascript date persian

嗨,任何人都可以帮我改变从Gregorian到波斯语javascript的日期.我想在html javascript中使用它

Ami*_*ati 17

要以波斯数字获取它:

new Date().toLocaleDateString('fa-IR');
// ????/?/??
Run Code Online (Sandbox Code Playgroud)

拉丁数字表示

new Date().toLocaleDateString('fa-IR').replace(/([?-?])/g, token => String.fromCharCode(token.charCodeAt(0) - 1728));
// 1399/1/23
Run Code Online (Sandbox Code Playgroud)


Mah*_*our 11

week = new Array("??????", "??????", "?? ????", "????????", "??? ????", "????", "????")
months = new Array("???????", "????????", "?????", "???", "?????", "??????", "???", "????", "???", "??", "????", "?????");
today = new Date();
d = today.getDay();
day = today.getDate();
month = today.getMonth() + 1;
year = today.getYear();
year = (window.navigator.userAgent.indexOf('MSIE') > 0) ? year : 1900 + year;
if (year == 0) {
    year = 2000;
}
if (year < 100) {
    year += 1900;
}
y = 1;
for (i = 0; i < 3000; i += 4) {
    if (year == i) {
        y = 2;
    }
}
for (i = 1; i < 3000; i += 4) {
    if (year == i) {
        y = 3;
    }
}
if (y == 1) {
    year -= ((month < 3) || ((month == 3) && (day < 21))) ? 622 : 621;
    switch (month) {
        case 1:
            (day < 21) ? (month = 10, day += 10) : (month = 11, day -= 20);
            break;
        case 2:
            (day < 20) ? (month = 11, day += 11) : (month = 12, day -= 19);
            break;
        case 3:
            (day < 21) ? (month = 12, day += 9) : (month = 1, day -= 20);
            break;
        case 4:
            (day < 21) ? (month = 1, day += 11) : (month = 2, day -= 20);
            break;
        case 5:
        case 6:
            (day < 22) ? (month -= 3, day += 10) : (month -= 2, day -= 21);
            break;
        case 7:
        case 8:
        case 9:
            (day < 23) ? (month -= 3, day += 9) : (month -= 2, day -= 22);
            break;
        case 10:
            (day < 23) ? (month = 7, day += 8) : (month = 8, day -= 22);
            break;
        case 11:
        case 12:
            (day < 22) ? (month -= 3, day += 9) : (month -= 2, day -= 21);
            break;
        default:
            break;
    }
}
if (y == 2) {
    year -= ((month < 3) || ((month == 3) && (day < 20))) ? 622 : 621;
    switch (month) {
        case 1:
            (day < 21) ? (month = 10, day += 10) : (month = 11, day -= 20);
            break;
        case 2:
            (day < 20) ? (month = 11, day += 11) : (month = 12, day -= 19);
            break;
        case 3:
            (day < 20) ? (month = 12, day += 10) : (month = 1, day -= 19);
            break;
        case 4:
            (day < 20) ? (month = 1, day += 12) : (month = 2, day -= 19);
            break;
        case 5:
            (day < 21) ? (month = 2, day += 11) : (month = 3, day -= 20);
            break;
        case 6:
            (day < 21) ? (month = 3, day += 11) : (month = 4, day -= 20);
            break;
        case 7:
            (day < 22) ? (month = 4, day += 10) : (month = 5, day -= 21);
            break;
        case 8:
            (day < 22) ? (month = 5, day += 10) : (month = 6, day -= 21);
            break;
        case 9:
            (day < 22) ? (month = 6, day += 10) : (month = 7, day -= 21);
            break;
        case 10:
            (day < 22) ? (month = 7, day += 9) : (month = 8, day -= 21);
            break;
        case 11:
            (day < 21) ? (month = 8, day += 10) : (month = 9, day -= 20);
            break;
        case 12:
            (day < 21) ? (month = 9, day += 10) : (month = 10, day -= 20);
            break;
        default:
            break;
    }
}
if (y == 3) {
    year -= ((month < 3) || ((month == 3) && (day < 21))) ? 622 : 621;
    switch (month) {
        case 1:
            (day < 20) ? (month = 10, day += 11) : (month = 11, day -= 19);
            break;
        case 2:
            (day < 19) ? (month = 11, day += 12) : (month = 12, day -= 18);
            break;
        case 3:
            (day < 21) ? (month = 12, day += 10) : (month = 1, day -= 20);
            break;
        case 4:
            (day < 21) ? (month = 1, day += 11) : (month = 2, day -= 20);
            break;
        case 5:
        case 6:
            (day < 22) ? (month -= 3, day += 10) : (month -= 2, day -= 21);
            break;
        case 7:
        case 8:
        case 9:
            (day < 23) ? (month -= 3, day += 9) : (month -= 2, day -= 22);
            break;
        case 10:
            (day < 23) ? (month = 7, day += 8) : (month = 8, day -= 22);
            break;
        case 11:
        case 12:
            (day < 22) ? (month -= 3, day += 9) : (month -= 2, day -= 21);
            break;
        default:
            break;
    }
}
console.log(week[d] + " " + day + " " + months[month - 1] + " " + year);
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用1994,09,19不是1373/07/27正确的转换是1373/06/28 (2认同)
  • 你好,Bashirpour 先生,如果您认为此更改很好,我对您的代码做了一些更改...请接受我的更改。祝你一切顺利。 (2认同)
  • 你好,特贾雷先生。感谢您的出色编辑。@MehrzadTejareh (2认同)

Ali*_*_Hr 8

您可以使用:toLocaleDateString();

例如 :

let today = new Date().toLocaleDateString('fa-IR');

console.log(today);
Run Code Online (Sandbox Code Playgroud)

fa-IR适用于波斯语和伊朗语,其他类似波纹管:

“ en-US”:英语

“ hi-IN”:用于印地语

。。

  • `new Date().toLocaleDateString('fa-IR',{年:'数字',月:'2 位数字',日:'2 位数字',formatMatcher:'基本'})` (7认同)
  • @MostafaSaadatnia,您应该在数据库中以时间戳格式保存日期和时间,并仅使用此方法将日期和时间显示为波斯语或其他日期。切勿将此格式保存到数据库中。 (2认同)

fin*_*ich 7

你可以像下面的代码一样简单地使用jalali-moment

import * as moment from 'jalali-moment';
let persianDate = moment("1989/1/24").locale('fa').format('YYYY/M/D'); // 1367/11/4
Run Code Online (Sandbox Code Playgroud)

plunker 中的演示


Rah*_*thi 6

您可以使用jalaali-js

JavaScript 语言

一些用于相互转换 Jalaali(Jalali、Persian、Khayyami、Khorshidi、Shamsi)和公历系统的 javascript 函数。


Mah*_*ili 6

此页面中的答案均不正确,在某些情况下有效,但并不总是正确!这适用于双方转换方法:

function gregorian_to_jalali(gy,gm,gd){
        var g_d_m=[0,31,59,90,120,151,181,212,243,273,304,334];
        var jy=(gy<=1600)?0:979;
        gy-=(gy<=1600)?621:1600;
        var gy2=(gm>2)?(gy+1):gy;
        var days=(365*gy) +(parseInt((gy2+3)/4)) -(parseInt((gy2+99)/100))
                +(parseInt((gy2+399)/400)) -80 +gd +g_d_m[gm-1];
        jy+=33*(parseInt(days/12053));
        days%=12053;
        jy+=4*(parseInt(days/1461));
        days%=1461;
        jy+=parseInt((days-1)/365);
        if(days > 365)days=(days-1)%365;
        var jm=(days < 186)?1+parseInt(days/31):7+parseInt((days-186)/30);
        var jd=1+((days < 186)?(days%31):((days-186)%30));
        return [jy,jm,jd];
    }
function jalali_to_gregorian(jy,jm,jd){
        var gy=(jy<=979)?621:1600;
        jy-=(jy<=979)?0:979;
        var days=(365*jy) +((parseInt(jy/33))*8) +(parseInt(((jy%33)+3)/4))
                +78 +jd +((jm<7)?(jm-1)*31:((jm-7)*30)+186);
        gy+=400*(parseInt(days/146097));
        days%=146097;
        if(days > 36524){
            gy+=100*(parseInt(--days/36524));
            days%=36524;
            if(days >= 365)days++;
        }
        gy+=4*(parseInt((days)/1461));
        days%=1461;
        gy+=parseInt((days-1)/365);
        if(days > 365)days=(days-1)%365;
        var gd=days+1;
        var sal_a=[0,31,((gy%4==0 && gy%100!=0) || (gy%400==0))?29:28,31,30,31,30,31,31,30,31,30,31];
        var gm
        for(gm=0;gm<13;gm++){
            var v=sal_a[gm];
            if(gd <= v)break;
            gd-=v;
        }
        return [gy,gm,gd];
    }
Run Code Online (Sandbox Code Playgroud)

代码来自: https: //github.com/hat3ck/Persian-Calendar-Qt

  • 就我个人而言,我更喜欢你的代码,但是,我猜想 toLocaleDateString('fa-IR'); 总是正确的!您可以尝试以下事件: new Date('0777/09/09').toLocaleDateString('fa-IR'); 它返回 0156/06/18 并且您的函数返回 0156/06/19 并且我相信 0156/06/18 是正确的!但这并不重要,您的函数对于所有较新的日期都可以正确工作。 (2认同)

归档时间:

查看次数:

8294 次

最近记录:

5 年,9 月 前