/*****************************************************************************/
/* Name:    JDToCal                                                          */
/* Typ:     function                                                         */
/* Zweck:   Kalenderdatum aus dem Julianischen Tag                           */
/* Argumente:                                                                */
/*   JD : umzuwandelnder Julianischer Tag                                    */
/* Rueckgabewert:                                                            */
/*   Array mit [Jahr, Monat, Tag, Stunden, Minuten, Sekunden]                */
/*****************************************************************************/
function JDToCal(JD)
{
  var A, B, F, alpha, C, E, D, Z;
  var yy, mm, dd, h, m, s;

  Z = Math.floor(JD + 0.5);
  F = (JD + 0.5) - Z;

  if (Z < 2299161)
    A = Z;
  else
  {
    alpha = Math.floor((Z - 1867216.25) / 36524.25);
    A = Z + 1 + alpha - Math.floor (alpha / 4);
  }

  B = A + 1524;
  C = Math.floor ((B - 122.1) / 365.25);
  D = Math.floor (365.25 * C);
  E = Math.floor((B - D) / 30.6001);

  dd = B - D - Math.floor (30.6001 * E) + F;

  if (E < 14)
    mm = E - 1;
  else
    mm = E - 13;
  if (mm > 2)
    yy = C - 4716;
  else
   yy = C - 4715;

  F = (F * 24);
  h = Math.floor(F);
  F = (F - Math.floor(F)) * 60;
  m = Math.floor(F);
  s = (F - Math.floor(F)) * 60;

  TDate = new Array(6); 

  TDate[0] = yy;
  TDate[1] = mm;
  TDate[2] = Math.floor(dd);
  TDate[3] = h;
  TDate[4] = m;
  TDate[5] = s;

  return TDate;
}


/*****************************************************************************/
/* Name:    JulDay                                                           */
/* Type:    function                                                         */
/* Purpose: berechnet die julianische-Tagnummer                              */
/* Argumente:                                                                */
/*   Tag, Monat, Jahr, Uhrzeit in UT                                         */
/* Rueckgabewert:                                                            */
/*   Julianisches Datum                                                      */
/*****************************************************************************/

function JulDay(Tag,Monat,Jahr,UT)
{
  UT=UT/24.0 //UT in Tagbruchteil umrechnen

  if (Monat <= 2)
  {
    Monat=Monat+12;
    Jahr=Jahr-1;
  }

  var B;
  var JD;

  B=Math.floor(Jahr/400)-Math.floor(Jahr/100);
  JD=Math.floor(365.25*Jahr)+Math.floor(30.6001*(Monat+1))+B+1720996.5+Tag+UT;

  return JD; 
}


/*****************************************************************************/
/* Name:    YearFrac                                                         */
/* Type:    function                                                         */
/* Purpose: berechnet das Datum als Jahresbruchteil                          */
/* Argumente:                                                                */
/*   Tag, Monat, Jahr, Uhrzeit in UT                                         */
/*****************************************************************************/

function YearFrac(Tag, Monat, Jahr,UT)
{
  y0 = JulDay(1,1,Jahr,0) //JD vom Jahresanfang berechnen

  JD = JulDay(Tag,Monat,Jahr,UT)

  AnzTage = JD - y0; //Anzahl der schon vergangenen Tage im Jahr

  frac = Jahr + (AnzTage / 365.25);

  return frac;
}


