// // LIBRERIA $gi PER LE DATE // // -------------------------------------------------------------- // // Per gestire le date col calendario gregoriano prolettico ossia // applicato ad ogni data anche precedente alla sua invenzione. // var $gi={versione:20170127,LibDalGGiul:"libreria del Giorno Giul.", mes:[0," Gen "," Feb "," Mar "," Apr "," Mag ", " Giu "," Lug "," Ago "," Set "," Ott "," Nov "," Dic "], dset:[0,"Lun ","Mar ","Mer ","Gio ","Ven ","Sab ","Dom "], faseluna:["\u263b01","\u263b01","\u263b02","\u263b03","\u263b04", "\u263b05","\u263d06","\u263d07","\u263d08","\u263d09", "\u263d10","\u263d11","\u263d12","\u263a13","\u263a14", "\u263a15","\u263a16","\u263e17","\u263e18","\u263e19", "\u263e20","\u263e21","\u263e22","\u263e23","\u263e24", "\u263e25","\u263b26","\u263b27","\u263b28","\u263b29"," "], xred:"\u003cbig style='color:red'\u003e", yred:"\u003c/big\u003e",ripeto:1, nomi:["xdati","yrisu"]}; // $gi["ladata"]=function(){var d,h,m,s,g,ms,an;d=new Date(); h=d.getHours();m=d.getMinutes();s=d.getSeconds(); g=d.getDate();ms=1+d.getMonth();an=d.getUTCFullYear(); return ["Millisec",Date.now(),"Anno",an,"Mese"+$gi.mes[ms], ms,"Giorno",g,"Ore",h,"Minuti",m,"Secondi",s]}; // $gi["fadataLibDalGGiul"]=function(){ var ja,jm,jg,nn,a0m1g1=$gi.gregorianoingg(0,1,1); var ime=[0,31,29,31,30,31,30,31,31,30,31,30,31]; $gi.LibDalGGiul=[0]; for(nn=1;146097>=nn;nn++)$gi.LibDalGGiul[nn]=a0m1g1; for(ja=0;400>ja;ja++){ for(jm=1;13>jm;jm++){ for(jg=1;ime[jm]>=jg;jg++){ nn=($gi.gregorianoingg(ja,jm,jg )-a0m1g1)%146097; $gi.LibDalGGiul[nn]=[ja,jm,jg];}}} return $gi.LibDalGGiul[146097]; }; // // Questa e' la funzione veramente utile nella trasformazione // del tempo in una data comprensibile. // $gi["trovadatagreg"]=function(gg){ var gd,nn,dd,gtondo=Math.round(gg); if(Array.isArray($gi.LibDalGGiul)){gd=gtondo+ 14609700000-$gi.LibDalGGiul[146097];} else{gd=gtondo+14609700000-$gi.fadataLibDalGGiul();} nn=gd%146097; dd=$gi.LibDalGGiul[nn]; return [dd[0]+400*((gd-nn)/146097-100000), dd[1],dd[2]+gg-gtondo]; }; // // Questa funzione serve per trovare la costante da aggiungere al // tempo iniziale di una simulazione in modo che abbia plausibile // data civile di inizio e poi, di fine. // $gi["gregorianoingg"]=function(aa,mm,g){ var a,am,m,im=["Eccesso mensile",0,1,-1,0,0,1,1,2,3,3,4,4]; a=Math.round(aa); m=Math.round(mm+119)%12+1; am=a*12+m+47999999999997; // // Il Giorno Giuliano del primo gennaio dell'anno zero // deve essere 1721060 per cui, volendo ammettere // persino date precedenti al 5000 a.C. impongo la costante // enorme -969998278970. // return (g+30*m+im[m]+365*a-969998278970 + (am-am%48)/48-(am-am%1200)/1200+(am-am%4800)/4800); }; // // VERSIONE MIGLIORATA del calcolo del GGiul ( consigliata ) // // Se riceve un solo argomento lo considera // il giorno giuliano e calcola l'anno, il mese e // il giorno che produce quel giorno giuliano. // Se invece riceve 2 o 3 o 4 argomenti, ignora // il primo ed usa il secondo e l'eventuale terzo // e l'eventuale quarto come anno mese e giorno e // da', come risultato, un vettore con l'elemento // iniziale il giorno giuliano dedotto dall'anno, // e dal mese e dal giorno. // $gi["giorg"]=function(gg){ var dg=1,ms=3,an,erro,gsec=gg*86400; var dagringg=function(aa,mm,g){ var a,am,m, im=["Ecmen",0,1,-1,0,0,1,1,2,3,3,4,4]; a=Math.round(aa);m=Math.round(mm+119)%12+1; am=a*12+m+47999999999997; return (g+30*m+im[m]+365*a-969998278970+ (am-am%48)/48-(am-am%1200)/1200+ (am-am%4800)/4800); } if(arguments.length>1){ an=arguments[1]; if(arguments.length>2)ms=arguments[2]; if(arguments.length>3)dg=arguments[3]; erro=dagringg(an,ms,dg); return [erro,an,ms,dg];} ms=Math.floor(gsec/2629746)-1; dg=Math.floor((gsec-2629746-2629746*ms)/86400); an=(ms-ms%12)/12-4712;ms=1+ms%12; erro=(dagringg(an,ms,dg)-gg); if(erro+1>dg){ if(ms==1){an--;ms=12;}else{ms--;} erro=(dagringg(an,ms,dg)-gg);} return [gg,an,ms,dg-erro]; }; // // Per sapere la Luna alla data voluta. // $gi["FaseLunare"]=function(Giorno,Mese,Anno){ // // Vale dopo il 1600 approssimativamente... // // Fornisce l'eta' della Luna tra 0 e 29. // Il plenilunio e' l'eta' 14 o 15. // Attenzione: gennaio == 1 (non 0) e dicembre == 12. // var G,M,A,NumDoro,NumSeco,Epatta; G = parseInt(Giorno+" "); M = parseInt(Mese+" "); A = parseInt(Anno+" "); if((1600>A)||(M>12)||(1>M)||(1>G)||(G>31))return 30; NumDoro= 1 + (A%19); NumSeco= Math.floor(A/100); Epatta=(296+ NumDoro*11 + Math.floor(NumSeco/3) - Math.floor((3*NumSeco-1)/4) )%30; return (Epatta+G+M-2*Math.floor((M+9)/12)-1)%30; }; // $gi["ricalcola"]=function(questo){ $gi.ripeto++; if($gi.ripeto%2==0){questo.style.background="red";} else{questo.style.background="magenta"}; $gi.calcoladata(); // alert("Esco da ricalcola"); }; // $gi["scrive_amg"]=function(a,m,g){ var listadati=document.getElementsByName($gi.nomi[0]); listadati[0].value=parseInt(a+" "); listadati[1].value=parseInt(m+" "); listadati[2].value=parseInt(g+" "); }; // // Viene chiamata al completo caricamento del file per // ottenere la data e dare i calcoli. // $gi["calcoladata"]=function(){ var $giul,$amg,$br="\u003cbr/\u003e"; var xxx,a,m,g,giul,kgiul,hgiul,vd; var listadati=document.getElementsByName($gi.nomi[0]); var listafeste=document.getElementsByName($gi.nomi[1]); // // Legge l'anno,il mese ( da 1 a 12 ) ed il giorno // with(Math){ a=round(eval(listadati[0].value)); m=(round(eval(listadati[1].value))-1)%12+1; g=round(eval(listadati[2].value)); }; // giul=$gi.gregorianoingg(a,m,g); $giul=$gi.giorg("Nuovo",a,m,g); $amg=$gi.giorg($giul[0]); // listafeste[0].innerHTML=$gi.dset[(giul+7000000000)%7+1]+ g+$gi.mes[m]+a+" == G.Giul. "+giul+ " [ "+$gi.trovadatagreg(giul)+" ] "+ $gi.faseluna[$gi.FaseLunare(g,m,a)]+ $br+" Oppure con la nuova function, il G.Giul= "+$giul+ $br+" e con la nuova function, dal G.Giul trova: "+$amg; // // alert("Pronto a ricalcolare "+versione); }; //