Salut quelqu'un peut-il m'aider à changer la date de grégorien en javascript persan. Je veux l'utiliser en html javascript
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);
Vous pouvez également vérifier ceci: JalaliJSCalendar ( github )
JalaliJSCalendar est un widget de sélection de date et de calendrier JavaScript basé sur "Dynarch DHTML Calendar" de Mihai Bazon. La principale différence entre deux est que JalaliJSCalendar prend également en charge le calendrier persan (AKA Hijri Shamsi), qui est le calendrier iranien officiel.
Il contient un convertisseur ( jalali.js ) et un sélecteur/calendrier HTML
Vous pouvez utiliser jalali-moment aussi simple que le code suivant
import * as moment from 'jalali-moment';
let persianDate = moment("1989/1/24").locale('fa').format('YYYY/M/D'); // 1367/11/4
vous pouvez utiliser: toLocaleDateString ();
par exemple :
let today = new Date().toLocaleDateString('fa-IR');
console.log(today);
fa-IR est pour le farsi (persan) et l'iran, les autres comme ci-dessous:
"en-US": pour l'anglais
"hi-IN": Pour l'hindi
. .
Vous pouvez utiliser le jalaali-js
Jalaali JavaScript
Quelques fonctions javascript pour convertir les systèmes de calendrier Jalaali (Jalali, persan, Khayyami, Khorshidi, Shamsi) et grégorien entre eux.
Obtenez 'jalali.js' à partir de ce lien .
Si vos numéros sont au format persan, vous devez d'abord les changer au format anglais, à partir de ce lien
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;
};
et utilisez comme la fonction 'getGregorian ()' ci-dessous pour convertir la date. Par exemple, je convertis la date '۱۳۹۸/۰۱/۲۴':
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;
}
function convertDate(stringArg) {
const ETF = '۰۱۲۳۴۵۶۷۸۹';
const ans = g2j(...stringArg.split('/').map(elem => +elem))
.map(elem =>
String(elem)
.split('')
.map(subElem => ETF[+subElem])
.join('')
)
.join('/');
return ans;
}
Pour l'obtenir en chiffres persans:
var localToday = new Date().toLocaleDateString('fa-IR');
console.log(localToday); // ۱۳۹۹/۱/۲۳
Pour changer les chiffres en latin:
var latinToday = new Date().toLocaleDateString('fa-IR').replace(/([۰-۹])/g, token => String.fromCharCode(token.charCodeAt(0) - 1728));
console.log(localToday); // 1399/1/23
aucune des réponses de cette page n'a fonctionné correctement, son fonctionnement dans certains cas mais pas toujours correct! cela fonctionne les deux méthodes de conversion côté:
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];
}