Closed gtoubiana closed 3 years ago
Fonctionne à partir de l'an 325 pour la paques chrétienne avec IMCCE (comme Heredis) Fonctionne à partir de l'an 1583 pour l'autre
Proposition de nomenclature :
gnjs.mf(y) for movable feasts gnjs.mf(y).st for Shrove Tuesday gnjs.mf(y).aw for Ash Wednesday gnjs.mf(y).ps for Palm Sunday gnjs.mf(y).ce for Christian Easter Sunday gnjs.mf(y).at for Ascension Thursday gnjs.mf(y).ps for Pentecost Sunday gnjs.mf(y).ts for Trinity Sunday gnjs.mf(y).cc for Corpus Christi gnjs.mf(y).oe for Orthodox Easter gnjs.mf(y).je for Jewish Easter
Javascripts : http://www.merlyn.demon.co.uk/holydays.htm
Javascript et formules : http://pgj.pagesperso-orange.fr/paques.htm
Autre : http://www.friesian.com/easter.htm#golden http://www.smart.net/~mmontes/ec-cal.html http://www.smart.net/~mmontes/ortheast.html http://catholic-resources.org/Lectionary/Calendar.htm http://www.oremus.org/liturgy/etc/ktf/app/easter.html http://catholicism.about.com/od/holydaysandholidays/f/Calculate_Date.htm http://www.imcce.fr/fr/grandpublic/temps/dates_paques.php
voir : https://www.imcce.fr/fr/grandpublic/temps/dates_paques.html
de 325 à 2500 après JC. Voir fonction couran()
en 1er !
w = self;
function oar(OK,CODE1,CODE2) { /*objets a ranger*/
this.OK
this.CODE1
this.CODE2
this.CODE3
this.CODE4
this.CODE4J
this.CODE5
this.CODE6
this.CYCLE
this.ANC
this.JSEM
}
function date(JJD,AN,MOIS,JOUR,TYPEA,NBMOIS) {
this.JJD
this.AN
this.MOIS
this.JOUR
this.TYPEA
this.ESPEA
this.NBMOIS
}
function trunc(x) {
if (x>0.0) return(Math.floor(x));
else return Math.ceil(x);
}
function round(x) {
if (x>0.0) return(Math.floor(x+0.5));
else return Math.ceil(x-0.5);
}
function JJDATEJ()
{
Z1=date.JJD+0.5;
Z=trunc(Z1);
A=Z;
B=A+1524;
C=trunc((B-122.1)/365.25);
D=trunc(365.25*C);
E=trunc((B-D)/30.6001);
date.JOUR=trunc(B-D-trunc(30.6001*E));
if(E<13.5)date.MOIS = trunc(E-1);
else date.MOIS = trunc(E-13);
if(date.MOIS>=3) date.AN = trunc(C-4716);
else date.AN = trunc(C-4715);
}
function JJDATE ()
{
Z1=date.JJD+0.5;
Z=trunc(Z1);
if (Z<2299161) A=Z;
else {ALPHA=trunc((Z-1867216.25)/36524.25);
A=Z+1+ALPHA-trunc(ALPHA/4);}
B=A+1524;
C=trunc((B-122.1)/365.25);
D=trunc(365.25*C);
E=trunc((B-D)/30.6001);
date.JOUR=trunc(B-D-trunc(30.6001*E));
if(E<13.5) date.MOIS = trunc(E-1);
else date.MOIS = trunc(E-13);
if(date.MOIS>=3) date.AN = trunc(C-4716);
else date.AN = trunc(C-4715);
}
function BISG()
/* TYPEA = 0 annee commune. */
/* TYPEA = 1 annee bissextile. */
{ date.NBMOIS=12;
date.TYPEA=0;
if ((date.AN % 4)==0) date.TYPEA=1;
if ((date.AN % 100)==0 && (date.AN % 400)!=0) date.TYPEA=0;}
function BISJ()
/* TYPEA = 0 annee commune. */
/* TYPEA = 1 annee bissextile. */
{ date.NBMOIS=12;
if ((date.AN % 4)==0) date.TYPEA=1; else date.TYPEA=0; }
function BISI()
{ oar.CYCLE=1+(date.AN-1)/19;
oar.ANC=1+(date.AN-1)%19;
aa=date.AN;
aa=12*aa+5;
a=aa%19;
jjd=DEBANJ(date.AN);
jjd1=DEBANJ(date.AN+1);
dt=jjd1-jjd;
if (a>6) {date.ESPEA=trunc(dt-352);
date.TYPEA=0;
date.NBMOIS=12;}
else {date.ESPEA=trunc(dt-382);
date.TYPEA=1;
date.NBMOIS=13;}
}
function DEBANJ(an)
{ x1=392640; x2=121555; x3=272953;
x4=492480; x5=347605; x6=365;
aa=an;
aa=12*aa+5;
a=aa%19;
t=(x1+x2*an+x3*a)/x4;
t=t+x5+x6*an+a;
jj=trunc(t);
dt=t-jj;
t=jj+1;
t=t-trunc(t/7)*7;
j=round(t);
pjjd=jj+0.5;
if (j==2 || j==4 || j==6) pjjd=jj+1.5;
if (j==1 && a>6 && dt>=0.632870) pjjd=jj+2.5;
if (j==0 && a>11 && dt>=0.897724) pjjd=jj+1.5;
return(pjjd);
}
function JULIEN()
{ IJOUR=date.JOUR;
Y=date.AN;
M=date.MOIS;
A = Y + M/100 + IJOUR/10000;
if(date.MOIS<=2){Y=Y-1;M=M+12;};
if(Y<0) date.JJD = Math.ceil(365.25*Y-0.75);
else date.JJD = Math.floor(365.25*Y);
date.JJD = date.JJD+trunc(30.6001*(M+1))+IJOUR+1720994.5;
if(A>1582.1014) date.JJD=date.JJD+2-trunc(Y/100)+trunc(trunc(Y/100)/4);
}
function JULIENJ()
{ IJOUR=date.JOUR;
Y=date.AN;
M=date.MOIS;
if(date.MOIS<=2) {Y=Y-1;M=M+12;};
if(Y<0) date.JJD = Math.ceil(365.25*Y-0.75);
else date.JJD = Math.floor(365.25*Y);
date.JJD = date.JJD+trunc(30.6001*(M+1))+IJOUR+1720994.5;
}
function ISRJ()
{ MOISC=new Array (
1,31,60,89,118,148,177,207,236,266,295,325,
1,31,60,90,119,149,178,208,237,267,296,326,
1,31,61,91,120,150,179,209,238,268,297,327);
MOISE=new Array (
1,31,60,89,118,148,178,207,237,266,296,325,355,
1,31,60,90,119,149,179,208,238,267,297,326,356,
1,31,61,91,120,150,180,209,239,268,298,327,357);
oar.CYCLE=(date.AN-1)/19 + 1;
oar.ANC=1+(date.AN-1) % 19;
AA=date.AN;
AA=12*AA+5;
A=AA%19;
jjd1=DEBANJ(date.AN+1);
jjd=DEBANJ(date.AN);
DT=jjd1-jjd;
if(A<=6) { date.ESPEA=trunc(DT-382);
date.JJD=jjd+MOISE[13*(date.ESPEA-1)+(date.MOIS-1)]-2+date.JOUR;
date.NBMOIS=13;
date.TYPEA=1; }
else { date.ESPEA=trunc(DT-352);
date.JJD=jjd+MOISC[12*(date.ESPEA-1)+(date.MOIS-1)]-2+date.JOUR;
date.NBMOIS=12;
date.TYPEA=0; };
}
function JISR()
{ MOISC=new Array (
1,31,60,89,118,148,177,207,236,266,295,325,
1,31,60,90,119,149,178,208,237,267,296,326,
1,31,61,91,120,150,179,209,238,268,297,327);
MOISE=new Array (
1,31,60,89,118,148,178,207,237,266,296,325,355,
1,31,60,90,119,149,179,208,238,267,297,326,356,
1,31,61,91,120,150,180,209,239,268,298,327,357);
Z1=date.JJD+0.5;
Z=trunc(Z1);
if(Z<2299161) AA=Z;
else {ALPHA=trunc((Z-1867216.25)/36524.25);
AA=Z+1+ALPHA-trunc(ALPHA/4);}
B=AA+1524;
C=trunc((B-122.1)/365.25);
D=trunc(365.25*C);
E=trunc((B-D)/30.6001);
date.JOUR=trunc(B-D-trunc(30.6001*E));
if(E<13.5) date.MOIS=trunc(E-1);
else date.MOIS=trunc(E-13);
if(date.MOIS>=3) date.AN=trunc(C-4716);
else date.AN=trunc(C-4715);
AAN=date.AN+3761;
JJD1=DEBANJ(AAN);
if(date.JJD<JJD1) { date.AN=AAN-1; JJDEB=DEBANJ(date.AN);}
else { date.AN=AAN; JJDEB=JJD1; AAN=AAN+1;
JJD1=DEBANJ(AAN);}
oar.CYCLE=(date.AN-1)/19 + 1;
oar.ANC=1+(date.AN-1) % 19;
AA=date.AN;
AA=12*AA+5;
A=AA%19;
if(A>6) { TYPE1=0; date.TYPEA=0; }
else { TYPE1=1; date.TYPEA=1; }
DT=JJD1-JJDEB; ;
if(TYPE1==1) date.ESPEA=round(DT-382);
else date.ESPEA=round(DT-352);
DT=date.JJD-JJDEB+1;
ARGC=12*(date.ESPEA-1); ARGE=13*(date.ESPEA-1);
if(TYPE1==1) { if(DT>=MOISE[ARGE+12])
{ date.MOIS=13;
date.JOUR=round(DT)-MOISE[ARGE+12]+1;}
else for (I=0; I<12; I++)
{
if ((DT>=MOISE[ARGE+I]) &&
(DT<MOISE[ARGE+I+1]))
{date.JOUR=round(DT)-MOISE[ARGE+I]+1;
date.MOIS=I+1;}
}}
else { if(DT>=MOISC[ARGC+11])
{date.MOIS=12;
date.JOUR=round(DT)-MOISC[ARGC+11]+1;}
else for (I=0; I<11; I++)
{if ((DT>=MOISC[ARGC+I])
&& (DT<MOISC[ARGC+I+1]))
{date.MOIS=I+1;
date.JOUR=round(DT)-MOISC[ARGC+I]+1;}
}
}}
function NOMJOUR()
{ A=((eval(date.JJD)+2.5)/7)%1.0;
oar.JSEM=round(A*7); }
function PAQUESG()
{
with (Math) {
A=floor(date.AN%19); B=floor(date.AN/100); C=floor(date.AN%100);
/*E remplacé par Z car E dans Math est la cste d'Euler */
D=floor(B/4); Z=floor(B%4); F=floor((B+8)/25);
G=floor((B-F+1)/3); H=floor((19*A+B-D-G+15)%30);
I=floor(C/4); K=floor(C%4); L=floor((32+2*Z+2*I-H-K)%7);
M=floor((A+11*H+22*L)/451); N=floor((H+L-7*M+114)/31);
P=(H+L-7*M+114)%31; date.MOIS=floor(N); date.JOUR=floor(P+1);
}
}
function PAQUESJ()
{
with (Math) {
A=floor(date.AN%4); B=floor(date.AN%7); C=floor(date.AN%19);
/*E remplacé par Z car E dans Math est la cste d'Euler */
D=floor((19*C+15)%30); Z=floor((2*A+4*B-D+34)%7);
F=floor((D+Z+114)/31); G=floor((D+Z+114)%31);
date.MOIS=Math.floor(F); date.JOUR=Math.floor(G+1);
}
}
function COMPUTJ()
{
S=(date.AN+8)%28;
oar.CODE1=S+1;
I=(date.AN+2)%15;
oar.CODE2=I+1;
C=Math.floor(date.AN/100);
U=date.AN%100;
N=date.AN%19;
N=N+1;
oar.CODE3=N;
L=(C+2-U-Math.floor((U/4)))%7;/*document.form.trace.value=L;*/
if (L<0) L=L+7;
oar.CODE4=L;
E=(11*(date.AN%19)+8)%30;
oar.CODE5=E;
}
function COMPUTG()
{
S=(date.AN+8)%28;
oar.CODE1=S+1;
I=(date.AN+2)%15;
oar.CODE2=I+1;
C=Math.floor(date.AN/100);
U=date.AN%100;
N=date.AN%19;
N=N+1;
oar.CODE3=N;
L=(2*C-Math.floor((C/4))-U-Math.floor((U/4)))%7;
if (L<0) L=L+7;
oar.CODE4=L;
E=(11*(date.AN%19)+8-C+Math.floor((C/4))+Math.floor((8*C+13)/25))%30;
/* Modification P. Rocher, le 11 février 2008 pour corrigé Epacte moins un en 1900 */
if (E<0) E=E+30;
oar.CODE6=E
}
function PAQUES(form)
{
lmoisg=new Array("null","janvier","février","mars","avril","mai","juin",
"juillet","août","septembre","octobre","novembre","décembre");
ledom=new Array("A","B","C","D","E","F","G","A");
ljour=new Array("samedi","dimanche","lundi","mardi","mercredi",
"jeudi","vendredi");
Chaine=" "; Chauxi="";
if (date.AN>1582) PAQUESG(); else PAQUESJ();
document.form.DATPAQ.value="\r\n dimanche "+ date.JOUR + " " + lmoisg[date.MOIS] +
" " + date.AN + "\r\n\r\n";
if (date.AN>1582) { /*affich paque orthodoxe et date en julien*/
PAQUESJ();
document.form.DATPAQ.value=document.form.DATPAQ.value + "Pâque orthodoxe (" +
date.JOUR + " " + lmoisg[date.MOIS] + " " + date.AN;
JULIENJ(); JJDATE();
document.form.DATPAQ.value=document.form.DATPAQ.value +
" dans le calendrier julien) \r\n" + "dimanche " + date.JOUR + " " +
lmoisg[date.MOIS] + " " + date.AN + "\r\n\r\n";
}
/*affich paque juive*/
date.MOIS=1; date.JOUR=1;
if (date.AN>1582) JULIEN(); else JULIENJ();
JISR();
if (date.TYPEA==1) date.MOIS=8; else date.MOIS=7;
date.JOUR=15;
document.form.DATPAQ.value=document.form.DATPAQ.value + "Pâque israelite (" +
date.JOUR + " " + "nissan" + " " + date.AN;
/*concord cal jul ou gre*/
ISRJ(); NOMJOUR(); JJDATE();
document.form.DATPAQ.value=document.form.DATPAQ.value +
" dans le calendrier israelite) \r\n" + ljour[oar.JSEM] + " " +
date.JOUR + " " +
lmoisg[date.MOIS] + " " + date.AN + "\r\n";
/*comput*/
COMPUTJ();
BISJ();
if (date.TYPEA==0) Chauxi=ledom[oar.CODE4];
else Chauxi=ledom[oar.CODE4+1] + ledom[oar.CODE4];
if (date.AN<=1582) Chaine="";
else { COMPUTG(); BISG();
Chaine="\r\nCOMPUT GREGORIEN\r\nlettre(s) dominicale(s) : ";
if (date.TYPEA==0) Chaine=Chaine + ledom[oar.CODE4] + "\r\n";
else Chaine=Chaine + ledom[oar.CODE4+1] + ledom[oar.CODE4] + "\r\n";
if (oar.CODE6==25 && oar.CODE3>11)
Chaine=Chaine + "Epacte : " + "XXV\r\n";
else Chaine=Chaine + "Epacte : " + oar.CODE6;
}
document.form.COMPUT.value="Cycle solaire : " + oar.CODE1 + "\r\n" +
"Indiction romaine : " + oar.CODE2 + "\r\n" +
"Nombre d'or : " + oar.CODE3 + "\r\n" +
"\r\nCOMPUT JULIEN\r\n" +
"Lettre(s) dominicale(s) : " + Chauxi + "\r\n" +
"Epacte : " </moiscODE5 + "\r\n" + Chaine;
}
function suivan(form) {
date.AN=(form.nyear.value=="") ? "0" :eval(form.nyear.value);
date.AN++;
if (date.AN<325 || date.AN>2500) {alert('hors limites');
date.AN--; }
form.nyear.value=date.AN;
form.DATPAQ.value="";
PAQUES(form);
}
function preced(form) {
date.AN=(form.nyear.value=="") ? "0" :eval(form.nyear.value);
date.AN--;
if (date.AN<325 || date.AN>2500) {alert('hors limites');
date.AN++; }
form.nyear.value=date.AN;
form.DATPAQ.value="";
PAQUES(form);
}
function couran(form) {
date.AN=(form.nyear.value=="") ? "0" :eval(form.nyear.value);
form.DATPAQ.value="";
if (date.AN<325 || date.AN>2500) { alert('hors limites');
return; }
PAQUES(form);
}
function dateinit(form) {
Todays=new Date();
/*selon les navigateurs la fonction getyear de Javascript
donne 100 ou 2000 (avant 2000 donnait toujours le millésime*/
if (Todays.getYear() < 1000)
document.form.nyear.value=1900 + Todays.getYear();
else
document.form.nyear.value=Todays.getYear();
}
From @gtoubiana on March 14, 2014 7:53
Voir http://jsfiddle.net/toubia95/YLhes/ et http://www.imcce.fr/langues/fr/grandpublic/temps/dates_paques.php#la détermination de la date de Pâques
Copied from original issue: gtoubiana/bms.js#10