Как изменить григорианскую дату на персидскую дату в javascript

Привет, может кто-нибудь помочь мне изменить дату с григорианского на персидский javascript. я хочу использовать его в html javascript

Ответ 1

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);

Ответ 2

Вы также можете проверить это: JalaliJSCalendar (github)

JalaliJSCalendar - это механизм выбора даты и календаря JavaScript на основе на "Dynarch DHTML Calendar" от Михая Базона. Основное различие между двумя является то, что JalaliJSCalendar поддерживает персидский (AKA Hijri Шамси), который является официальным иранским календарем.

Он содержит преобразователь (jalali.js) и HTML datepicker/calendar

Ответ 3

Вы можете использовать Jalali-момент так же просто, как следующий код

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

демо в плункер

Ответ 4

Вы можете использовать jalaali-js

Jalaali JavaScript

Несколько функций javascript для преобразования Jalaali (Jalali, Persian, Khayyami, Khorshidi, Shamsi) и григорианские календарные системы для каждого другие.

Ответ 5

Вы можете использовать: toLocaleDateString();

например:

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

console.log(today);

fa-IR для фарси (персидский) и иран, другой, как ниже:

"en-US": для английского

"Привет": для хинди

, ,

Ответ 6

Получить 'jalali.js' по этой ссылке.

Если ваши номера в персидском формате, сначала вы должны изменить их на английский формат, по этой ссылке

var
        persianNumbers = [/۰/g, /۱/g, /۲/g, /۳/g, /۴/g, /۵/g, /۶/g, /۷/g, /۸/g, /۹/g],
        arabicNumbers = [/٠/g, /١/g, /٢/g, /٣/g, /٤/g, /٥/g, /٦/g, /٧/g, /٨/g, /٩/g],
        fixNumbers = function (str) {
            if (typeof str === 'string') {
                for (var i = 0; i < 10; i++) {
                    str = str.replace(persianNumbers[i], i).replace(arabicNumbers[i], i);
                }
            }
         return str;
        };

и используйте такую функцию как getGregorian() ниже для преобразования даты. Например, я конвертирую дату "۱۳۹۸/۰۱/۲۴":

function getGregorian () {
            var date = ("۱۳۹۸/۰۱/۲۴").split('/');
            y = Number( fixNumbers(date[0]) );
            m = Number( fixNumbers(date[1]) );
            d = Number( fixNumbers(date[2] ));

            gDate = toGregorian(y, m, d)
            gDate = gDate .gy + '/' + gDate .gm + '/' + gDate .gd;

        }

Ответ 7

не ответы на этой странице работали правильно, в некоторых случаях это работает, но не всегда правильно! это работает с обеих сторон методы преобразования:

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