//--公曆與連續紀日互轉--//
function D0(y,m,d){//日差天數
  var ifG=ifGr(y,m,d,1);
  var monL=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
  if(ifG)
    if((y%100!=0&&y%4==0)||(y%400==0))
      monL[2]+=1;
    else ;
  else
    if(y%4==0)
      monL[2]+=1;
    else ;
  var v=0;
  for(var i=0;i<=m-1;i++){
    v+=monL[i];
  }
  v+=d;
  if(y==1582){
    if(ifG==1)
      v=v-10;
    if(ifG==-1)
      v=-1;  //infinity 
  }
  return v;
}
function antiD0(y,x){//反日差天數
 var yL=D0(y,12,31)-D0(y,1,0);
 var yL2=D0(y-1,12,31)-D0(y-1,1,0);
 if(x<1){
  var m=1;
  var x=x+yL2;
 for(var j=1;j<=12;j++){
    var mL=D0(y-1,j+1,1)-D0(y-1,j,1);
    if(x<=mL||j==12){
      var m=j-12;
      break;
    }
    else 
       x-=mL; 
  }
  return 100*m+x;
  }else{
 if(x>yL){
  var m=1;
  var x=x-yL;
 for(var j=1;j<=12;j++){
    var mL=D0(y+1,j+1,1)-D0(y+1,j,1);
    if(x<=mL||j==12){
      var m=j+12;
      break;
    }
    else 
       x-=mL; 
  }
  return 100*m+x;
  }else{
  var m=1;
  for(var j=1;j<=12;j++){
    var mL=D0(y,j+1,1)-D0(y,j,1);
    if(x<=mL||j==12){
      var m=j;
      break;
    }
    else 
       x-=mL; 
  }
  return 100*m+x;
}}
}
//年差天數
function D(y){
  var v=(y-1)*365+floor((y-1)/4);  //Julian的年差天數
  if(y>1582)
    v+=-floor((y-1)/100)+floor((y-1)/400);  //Gregorian的年差天數
  return v;
}
//等效標準天數--公元1年1月2號為0日
function erD(y,m,d){
  var v=(y-1)*365+floor((y-1)/4)+D0(y,m,d)-2;  //Julian的等效標準天數
  if(y>1582)
    v+=-floor((y-1)/100)+floor((y-1)/400)+2;  //Gregorian的等效標準天數
  return v;
}
//等效儒略日天數--前4713年1月1號為0日，0點為界不管時區
function erJD(y,m,d){
  var v=(y-1)*365+floor((y-1)/4)+D0(y,m,d)-2;
  if(y>1582)
    v+=-floor((y-1)/100)+floor((y-1)/400)+2;
  var jd=(v+1721425);//等效儒略日
  return jd;
}
//23點為界等效儒略日天數
function erJD2(y,m,d,h){
  var v=(y-1)*365+floor((y-1)/4)+D0(y,m,d)-2;
  if(y>1582)
    v+=-floor((y-1)/100)+floor((y-1)/400)+2;
    var jd=(h<23)?(v+1721425):(v+1721425)+1;//23點為界等效儒略日
  return jd;
}
//標準儒略日
function JD(y,m,d,h,min,sec,zone){
  var ifG=ifGr(y,m,d,1);
  var jt=(h+(min+sec/60)/60)/24-0.5-zone/24;
  var jd=(ifG)?(erD(y,m,d)+1721425+jt):(erD(y,m,d)+1721425+jt);//儒略日
  return jd;
}
  function reerJD(jd){ //等效儒略日天數轉公曆
   var m=0;var d=0;var mjeJD=jd;
  var jeaJD=2415021;//1900,1,1等效JD日
  var yey=floor((mjeJD-jeaJD)/365.25+1900);if(mjeJD>=2299239)yey=floor((mjeJD+10-jeaJD)/365.2425+1900);
  var y=yey;if(mjeJD<erJD(yey,1,1))y=yey-1;if(mjeJD>=erJD(yey+1,1,1))y=yey+1;
  for(var i=1;i<=12;i++){
  if(mjeJD>=erJD(y,i,1)&&mjeJD<erJD(y,i+1,1))m=i,d=mjeJD-erJD(y,i,1)+1;
  }
  var dd=(y==1582&&m==10&&d>=5)?d+10:d;
  var ymd=y+','+m+','+dd;
 return ymd;
  }
  function revJD(jd){ //儒略日數轉公曆
   var D='';var A='';var D3=0;var D4=0;var D5=0;var D6=365.25;
   var A=floor(jd+1-0.167);var F=tail(jd);//取得北京時間日數的整數部份A及小數部分F
   var m=0;var d=0;var mjeJD=A;
  var jeaJD=2415021;//1900,1,1等效JD日
  var yey=floor((mjeJD-jeaJD)/365.25+1900);if(mjeJD>=2299239)yey=floor((mjeJD+10-jeaJD)/365.2425+1900);
  var y=yey;if(mjeJD<erJD(yey,1,1))y=yey-1;if(mjeJD>=erJD(yey+1,1,1))y=yey+1;
  for(var i=1;i<=12;i++){
  if(mjeJD>=erJD(y,i,1)&&mjeJD<erJD(y,i+1,1))m=i,d=mjeJD-erJD(y,i,1)+1;
  }
  var dd=(y==1582&&m==10&&d>=5)?d+10:d;
  var ymd=y+','+m+','+dd;
 return ymd;
  }
  function moncyiglm(dj,da2,kb){//農曆轉公曆,dj等效儒略日,da2農曆日(用于自動校對),kb控制開關
   var m=0;var d=0;var mjeJD=dj;
  var jeaJD=2415021;//1900,1,1等效JD日
  var yey=floor((mjeJD-jeaJD)/365.25+1900);if(mjeJD>=2299239)yey=floor((mjeJD+10-jeaJD)/365.2425+1900);
  var y=yey;if(mjeJD<erJD(yey,1,1))y=yey-1;if(mjeJD>=erJD(yey+1,1,1))y=yey+1;
  for(var i=1;i<=12;i++){
  if(mjeJD>=erJD(y,i,1)&&mjeJD<erJD(y,i+1,1))m=i,d=mjeJD-erJD(y,i,1)+1;
  }
  var ma=m;
  if(kb==1)ma=y;if(kb==2)ma=(y==1582&&m==10&&d>=5)?d+10:d;//kb=0或''(空)反回公曆月,kb=1反回公曆年,kb=2反回公曆日
   return ma;
}//調用例：moncyiglm(初一DJ日+農曆日-1,農曆日,kb)
