Signification d'un code javascript.

Résolu
farid69100 Messages postés 3 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 20 juillet 2009 - 20 juil. 2009 à 10:01
farid69100 Messages postés 3 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 20 juillet 2009 - 20 juil. 2009 à 11:07
Bonjour à tous,

Ceci est mon premier message sur ce forum.
Je me suis mis à javascript et je souhaiterais faire une conversion d'un calendirer grégiorien en calendrier lunaire.
J'ai récupéré pas mal de choses sur le net, en revanche je ne saisi pas tout.
Est-ce que quelqu'un pourrait me commenter, le code source suivant de manière détaillée?
En fait ce code permets de calculer le jour julien à partir de n'importe quel calendrier :

/* ----------------------------------------------------------------------------------- */
function leap_persian(year)
{
return ((((((year - ((year > 0) ? 474 : 473)) % 2820) + 474) + 38) * 682) % 2816) < 682;
}

/* ----------------------------------------------------------------------------------- */
// PERSIAN_TO_JD
var PERSIAN_EPOCH = 1948320.5;
var PERSIAN_WEEKDAYS = new Array("Yekshanbeh", "Doshanbeh",
"Seshhanbeh", "Chaharshanbeh",
"Panjshanbeh", "Jomeh", "Shanbeh");

function persian_to_jd(year, month, day)
{
var epbase, epyear;

epbase = year - ((year >= 0) ? 474 : 473);
epyear = 474 + mod(epbase, 2820);

return day +
((month <= 7) ?
((month - 1) * 31) :
(((month - 1) * 30) + 6)
) +
Math.floor(((epyear * 682) - 110) / 2816) +
(epyear - 1) * 365 +
Math.floor(epbase / 2820) * 1029983 +
(PERSIAN_EPOCH - 1);
}

/* ----------------------------------------------------------------------------------- */
// JD_TO_PERSIAN -- function jd_to_persian(jd)
{
var year, month, day, depoch, cycle, cyear, ycycle,
aux1, aux2, yday;


jd = Math.floor(jd) + 0.5;

depoch = jd - persian_to_jd(475, 1, 1);
cycle = Math.floor(depoch / 1029983);
cyear = mod(depoch, 1029983);
if (cyear == 1029982) {
ycycle = 2820;
} else {
aux1 = Math.floor(cyear / 366);
aux2 = mod(cyear, 366);
ycycle = Math.floor(((2134 * aux1) + (2816 * aux2) + 2815) / 1028522) +
aux1 + 1;
}
year = ycycle + (2820 * cycle) + 474;
if (year <= 0) {
year--;
}
yday = (jd - persian_to_jd(year, 1, 1)) + 1;
month = (yday <= 186) ? Math.ceil(yday / 31) : Math.ceil((yday - 6) / 30);
day = (jd - persian_to_jd(year, month, 1)) + 1;
return new Array(year, month, day);
}


La ou j'ai du mal c'est sur toute la syntaxe propre à javascript(?, :, ect...).
le code fonctionne je l'ai testé mais j'ai vraiement envie de comprendre comment ça marche.

Merci à tous pour votre aide.

4 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
20 juil. 2009 à 11:05
c'est une série de tests pour retourner une valeur

pourquoi faire simple quand on peut
faire compliqué, n'est-il pas !
ce genre de ligne devient ésotérique, illisible,
ça doit faire "initié" je suppute...

le début :

year - ((year > 0) ? 474 : 473)

si year >0
year-474
sinon year - 473

pour le reste, tu décortiqueras !
3
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
20 juil. 2009 à 10:33
Bonjour,

>>c'est sur toute la syntaxe propre à javascript
faut t'acheter une doc.
on ne peut pas tout te commenter le scritp mis,
primo ça ne te servirait pas à grand chose
pour l'instant

la doc que j'utilise selfHTML,
version chm ( celle html existe ), en français,
gratis, téléchargeable.
et il y en a d'autres....

Cordialement [mon Site] [M'écrire] Bul
0
farid69100 Messages postés 3 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 20 juillet 2009
20 juil. 2009 à 10:36
Merci pour la doc, mais pour gagner du temps à que signifie cette ligne de commande :

return ((((((year - ((year > 0) ? 474 : 473)) % 2820) + 474) + 38) * 682) % 2816) < 682;

Merci
0
farid69100 Messages postés 3 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 20 juillet 2009
20 juil. 2009 à 11:07
Merci pour la réponse, c'est ce bout de code que j'arrivais pas à décortiquer.
0
Rejoignez-nous