lunar -- ´ÞÀÇ À§Ä¡, À½¾ç·Âº¯È¯ ¹× º°ÀÚ¸®, ÀÏ¿ù½Ä °è»ê

¼Ò½º´Ý±â | 24Àý±â °è»ê | À½¾ç·Âº¯È­, º°ÀÚ¸®, ÀÏ¿ù½Ä °è»ê | ¸Þ½Ã¿¡ °üÃøÁ¤º¸(½Ç½Ã°£) | ¸Þ½Ã¿¡ °üÃøÁ¤º¸(¿À´ÃÀüü) | deltaT °è»ê | ºÎÈ°Àý ³¯Â¥ °è»ê
<?php
function simple_astro($y$m$d$_location// solar
{
  list(
$lymd,$info) = lunar::tolunar($y,$m,$d); // lunar
  
$lage $info[5];

  list(
$offical,$civil,$nautical,$astronomical,$moreinfo) = solar::sunrise_sunset($y,$m,$d,$_location); // all

  
return array($lymd,$lage,$offical,$civil,$nautical,$astronomical);
}

function 
get_solarename($str)
{
  
$solarename = array ('N'=>'¾øÀ½''A'=>'±Ýȯ''T'=>'°³±â''H'=>'Hybird''P'=>'ºÎºÐ');

  
$name $solarename[$str[0]];
  
$size strlen($str);

  for(
$i=1$i<$size$i++)
  {
    
$name .= ', or '.$solarename[$str[$i]];
  }
  if(!
$name$name '¾øÀ½'// recheck in lunar info

  
return 'ÀϽÄ('.$name.')';
}

function 
get_lunarename($str)
{
  
$lunarename = array ('N'=>'¾øÀ½''t'=>'°³±â''p'=>'ºÎºÐ''n'=>'¹Ý¿µ');

  
$name $lunarename[$str[0]];
  
$size strlen($str);

  for(
$i=1$i<$size$i++)
  {
    
$name .= ', or '.$lunarename[$str[$i]];
  }
  if(!
$name$name '¾øÀ½'// recheck in solar info

  
return '¿ù½Ä('.$name.')';
}

require_once 
'_lib/class.calendar.php';
require_once 
'_lib/class.solar.php';
require_once 
'_lib/class.lunar.php';
require_once 
'_lib/func.debug.php';
require_once 
'class.moonrise.php'// new class

$_self basename($_SERVER['SCRIPT_NAME']);
$title 'lunar -- ´ÞÀÇ À§Ä¡, À½¾ç·Âº¯È¯ ¹× º°ÀÚ¸®, ÀÏ¿ù½Ä °è»ê';

echo <<<___END
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>
$title</TITLE><P><H2>$title</H2>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<SCRIPT LANGUAGE="JavaScript" type="text/JavaScript">
<!--
var starttime = (new Date()).getTime();
//-->
</SCRIPT>
<STYLE TYPE="text/css">
<!--
  * { font-family:NanumGothic,'³ª´®°íµñ','Malgun Gothic',Dotum,'µ¸¿ò',Gulim,'±¼¸²',Helvetica,Apple-Gothic; }
  body, td { font-size:10pt; }
  td { font-family:Helvetica; }
  table { background-color:#bbbbbb; } /*  border:1px solid #cccccc; */
  tr { background-color:#ffffff; }
 .bb { background-color:dodgerblue; }
 .dayyear { background-color:#c9d8ff; }
 .pre { font-family:Dotumche,Helvetica; white-space: pre; }
 .small { Helvetica; white-space: pre; font-size:9pt; }
-->
</STYLE>
</HEAD>
<BODY>\n
___END;

$_menuindex = array
(
  
'solar.php'         => '24Àý±â °è»ê',
  
'lunar.php'         => 'À½¾ç·Âº¯È­, º°ÀÚ¸®, ÀÏ¿ù½Ä °è»ê',
  
'messier.php'       => '¸Þ½Ã¿¡ °üÃøÁ¤º¸(½Ç½Ã°£)',
  
'messier.today.php' => '¸Þ½Ã¿¡ °üÃøÁ¤º¸(¿À´ÃÀüü)',
  
'deltat.php'        => 'deltaT °è»ê',
  
'easter.php'        => 'ºÎÈ°Àý ³¯Â¥ °è»ê'
);

$menu '';
foreach(
$_menuindex AS $k=>$v)  $menu .= " | <A HREF='$k'>$v</A>";

if(
$_GET['view'])
{
  echo 
'<A HREF="'.$_self.'">¼Ò½º´Ý±â</A>'.$menu.'<HR>'."\n";
  
highlight_file(basename($_self));
  return;
}

//echo date('Z T').' ---- ';
if($_POST)
{
  
flush();
  
$_p $_POST['_p'];
  
$_l $_POST['_l'];
  
$_checkedm[$_l['m']] = 'CHECKED';
  
$_checkedl[$_l['l']] = 'CHECKED';
  
$_time calendar::_mktime(21,0,0,(int)$_p['m'],(int)$_p['d'],(int)$_p['y']); // local time 21:00 (UTC 12:00)
  
$_location = (int)$_POST['_location'];;
  
$_selected[$_location] = 'SELECTED';
}
else
{
  
$_time mktime(21,0,0); // local time 21:00 (UTC 12:00)
  
$_location 0;
}

$_w = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
$_locations = array('¼­¿ï½Ã','µ¶µµ(µ¿µµ)','Æ÷Ç×(°æºÏ)','¾È¸é(Ãæ³²)');

// rewrite
list($ymd,$_p['y'],$_p['m'],$_p['d'],$w) = explode(' ',calendar::_date('Y-m-d Y n j w',$_time));

if(
$_l['m']) // ÀԷ°ªÀÌ À½·ÂÀÏ °æ¿ì
{
  list(
$ymd,$ck,$y,$m,$d,$w) = lunar::tosolar($_p['y'],$_p['m'],$_p['d'],$_l['l']);
  if(!
$ck$_err '<FONT COLOR=#FF0000>input date --> invalid date</FONT>';
  
$_time calendar::_mktime(21,0,0,$m,$d,$y); // overwrite, local time 21:00 (UTC 12:00)
} else
{
  
$y $_p['y'];
  
$m $_p['m'];
  
$d $_p['d'];
}

//print_r(date('Y m d w l W',$_time));
//echo "$y $m $d ";

list($_ymd,$_info,$s,$f,$n) = $lunar lunar::tolunar($y,$m,$d);
list(
$_y,$_m,$_d,$_l,$_t,$_a,$_e) = $_info// À½·Â ³¯Â¥

//_print_r($lunar);

$_ly $_y;
$_lm $_m 1//  À½·Â, ´ÙÀ½ ´Þ ÇÕ»èÀÏ
if($_lm 12) { $_lm -= 12$_ly++; }

/***
echo '<pre>';
echo 'calendar::_getjd ';
print_r(calendar::_getjd(-4712,1,1,21,0,0))."\n";
echo 'calendar::mkjd '.calendar::mkjd(21,0,0,1,1,-4712)."\n";
echo '_solar::_getjd ';
print_r(lunar::_getjd(calendar::_mktime(21,0,0,1,1,-4712)))."\n";
***/

## BC patch
##
//$_fymd = explode(' ',calendar::_date('Y n d',$f[2])); // BC(-year) bug patch
$_fymd explode('-',$f[0]);
if(
$_fymd[3]) { array_shift($_fymd); $_fymd[0] *= -1; }
list(
$_lf) = lunar::tolunar($_fymd[0],$_fymd[1],$_fymd[2]); // À̹ø´Þ ¸Á½Ã°¢ÀÏ(À½·Â)

$_ls sprintf('%d-%02d-%02d',$_y,$_m,1);    // À̹ø´Þ ÇÕ»èÀÏ(À½·Â)
$_ln sprintf('%d-%02d-%02d',$_ly,$_lm,1);  // ´ÙÀ½´Þ ÇÕ»èÀÏ(À½·Â)

$leap $_l '<FONT COLOR=#FF0000>À±´Þ</FONT>' 'Æò´Þ';
$w $_w[$w]; // weekday

$e_c get_solarename($_e).', '.get_lunarename($_e);
$e_s get_solarename($s[3]);
$e_f get_lunarename($f[3]);
$e_n get_solarename($n[3]);

$_stime=calendar::_mktime(21,0,0,$m,$d,$y);  // local time 21:00 (UTC 12:00)
$moon lunar::moon($_stime);
$sun solar::sun($_stime);
$zodiac lunar::zodiac($y,$m,$d);

## ÀÏÃâ/Àϸô, ¹Ú¸í(twilight)
## http://www.kasi.re.kr/html/study/qna/?f=3&idx=19911
##
list($offical,$civil,$nautical,$astronomical,$moreinfo) = solar::sunrise_sunset($y,$m,$d,$_location); // all
$scul =  $moreinfo[0]." ($moreinfo[3])";

## ¿ùÃâ¸ô
$mrst moonrise::riseset($y,$m,$d,$_location,1); // ¿À´Ã(t)
$mrise$mrst[1] ? $mrst[1] : $mrst[4];
$mset $mrst[0] ? $mrst[0] : $mrst[3];
$mcul $mrst[2]." ($mrst[5])";  // ³²Áß


echo '<A HREF="'.$_self.'?view=1">¼Ò½ºº¸±â</A>'.$menu.'<HR>'."\n";

echo <<<__END
<SCRIPT>
<!--
var year = 0;
function check_leap(obj)
{
  var leap = obj.elements["_l[l]"].checked;
  if(leap) obj.elements["_l[m]"].checked = true;
}
function check_lunar(obj)
{
  var lunar = obj.elements["_l[m]"].checked;
  if(!lunar) obj.elements["_l[l]"].checked = false;
}
//-->
</SCRIPT>
<PRE class=pre>
<H2>µ¥¸ð -- Å×½ºÆ®</H2>
- À¯È¿±â°£: ¾ç·Â 1902-01-10 - 2038-01-18
- À¯È¿±â°£: À½·Â 1901-12-01 - 2037-12-14
<FORM METHOD=post>
»ý³â¿ùÀÏ: <INPUT TYPE=text NAME='_p[y]' VALUE='
$_p[y]' SIZE=5 MAXLENGTH=5
>³â <INPUT TYPE=text NAME='_p[m]' VALUE='
$_p[m]' SIZE=2 MAXLENGTH=2
>¿ù <INPUT TYPE=text NAME='_p[d]' VALUE='
$_p[d]' SIZE=2 MAXLENGTH=2
>ÀÏ»ý <INPUT TYPE=checkbox NAME='_l[m]' VALUE=1 
$_checkedm[1] onClick='check_lunar(this.form)'
>À½·Â <INPUT TYPE=checkbox NAME='_l[l]' VALUE=1 
$_checkedl[1] onClick='check_leap(this.form)'
>À±´Þ
ÀÏÃâÀϸô: <SELECT NAME='_location'>
<OPTION VALUE=0 
$_selected[0]>$_locations[0]
<OPTION VALUE=1 
$_selected[1]>$_locations[1]
<OPTION VALUE=2 
$_selected[2]>$_locations[2]
<OPTION VALUE=3 
$_selected[3]>$_locations[3]
</SELECT><BR>
<INPUT TYPE=submit VALUE='  °è»êÇϱâ(Submit)  '
> <INPUT TYPE=button VALUE=' ÃʱâÈ­(Reset) ' OnClick='location.href="
$_self"'>
</FORM>
[°á°ú]
<FONT COLOR=#0000FF>
- ¾ç·Â: 
$ymd ($w$_err
- À½·Â: 
$_ymd ($w$leap ${_t}ÀÏ $_err
- Á¤º¸: ¿ù·É: 
${_a}$e_c
- À̹ø´Þ ÇÕ»è(ÃÊÇÏ·ç): 
$s[0] $s[1](¾ç·Â), ${_ls}(À½·Â) $e_s
- À̹ø´Þ ¸Á(À½·Âº¸¸§): 
$f[0] $f[1](¾ç·Â), ${_lf}(À½·Â) $e_f
- ´ÙÀ½´Þ ÇÕ»è(ÃÊÇÏ·ç): 
$n[0] $n[1](¾ç·Â), ${_ln}(À½·Â) $e_n
- ÀÏÃâÀϸô: 
$offical[0] / $offical[1] $_locations[$_location]  ³²Áß $scul
- ¿ùÃâ¿ù¸ô: 
$mrise / $mset $_locations[$_location]  ³²Áß $mcul
- ½Ã¹Î¹Ú¸í: 
$civil[0] / $civil[1] $_locations[$_location]
- Ç×Çعڸí: 
$nautical[0] / $nautical[1] $_locations[$_location]
- Ãµ¹®¹Ú¸í: 
$astronomical[0] / $astronomical[1] $_locations[$_location]
- º°ÀÚ¸®: 
$zodiac[0]$zodiac[1]
</FONT><HR width=90% align=left>
__END;

print_r($moreinfo);
print_r($mrst);
$_today sprintf('%04d%02d%02d',$y,$m,$d); // solar
$_tyear $y;
$_pdtime $_time// print debug time

echo "<TABLE CELLPADDING=3 CELLSPACING=1 BORDER=0 WIDTH=860>\n";
echo 
"<TR><TD>³¯Â¥</TD><TD align=center>¿äÀÏ</TD><TD>À½·Â</TD><TD align=right class=small>¿ù·É(UTC 12:00)</TD>".
    
"<TD align=center>¿ùÃâ¸ô</TD><TD align=center>ÀÏÃâ¸ô</TD>".
    
"<TD align=center>½Ã¹Î¹Ú¸í</TD><TD align=center>õ¹®¹Ú¸í</TD><TD>Debug utime</TD></TR>\n";

for(
$i=-8$i<=31$i++)
{
  
$t 86400 $i;

  list(
$ay,$am,$ad,$aw) = explode(' ',calendar::_date('Y m d D',$_pdtime+$t));
  
$class = ("$ay$am$ad== $_today) ? 'class=dayyear' '';

  
// À½·Â,¿ù·É,ÀÏÃâ¸ô,¹Ú¸í½Ã°£
  
$astro simple_astro($ay,$am,$ad,$_location);

  
// ¿ùÃâ¸ô
  
$mrst moonrise::riseset($ay,$am,$ad,$_location,1);
  
$mrise$mrst[1] ? $mrst[1] : ($mrst[4] ? $mrst[4] : '---');
  
$mset $mrst[0] ? $mrst[0] : ($mrst[3] ? $mrst[3] : '---');

  echo 
"<TR $class>";
  echo 
"<TD>$ay-$am-$ad</TD><TD align=center>$aw</TD><TD>$astro[0]</TD><TD align=right>$astro[1]</TD>".
    
"<TD align=center>$mrise / $mset</TD>".
    
'<TD align=center>'.$astro[2][0].' / '.$astro[2][1].'</TD>'.
    
'<TD align=center>'.$astro[3][0].' / '.$astro[3][1].'</TD>'.
    
'<TD align=center>'.$astro[5][0].' / '.$astro[5][1].'</TD>'.
    
'<TD class=small>'.calendar::_date('Y-m-d H:i:s',$_pdtime+$t).' '.($_pdtime+$t).'</TD>'// debug
    
"\n</TR>\n";
}
echo 
"</TABLE><HR width=90% align=left>\n";

## find blue moon
##
$bluemoon $solareclipse = array();
$_by $y 3// start -3 year
$_bm $m;
$_bd 1;
for(
$i=0$i<82$i++)
{
  list(,,
$_bfirst,$_bmfull,$_bnext) = lunar::tolunar($_by,$_bm,$_bd);
  list(
$_bmfully,$_bmfullm) = explode('-',$_bmfull[0]);

  
$tmp sprintf('%04d%02d',$_bmfully,$_bmfullm);
  
$bluemoon[$tmp][] = array($_bmfull[0],$_bmfull[1],$_bmfull[3]);
  list(
$_by,$_bm,$_bd) = explode('-',$_bnext[0]); // next

  
if($_bfirst[3] != 'N'$solareclipse[$tmp] = array($_bfirst[0],$_bfirst[1],$_bfirst[3]);
}

## print blue moon
##
echo <<<___END
<div class=pre>
--------------------------+----------------------------
Solar Eclipse             | Lunar Eclipse
--------------------------+----------------------------
T - °³±âÀϽÄ(´ÞÀÇ º»¿µ)   | t - °³±â¿ù½Ä(Áö±¸ÀÇ º»¿µ)
A - ±ÝȯÀϽÄ(´ÞÀÇ º»¿µ)   |
H - Hybrid(±Ýȯ/°³±âÀϽÄ) |
P - ºÎºÐÀϽÄ(´ÞÀÇ ¹Ý¿µ)   | p - ºÎºÐ¿ù½Ä(Áö±¸ÀÇ º»¿µ)
                          | n - ¹Ý¿µ½Ä(Áö±¸ÀÇ ¹Ý¿µ)
--------------------------+----------------------------
* ´ÞÀ̠žçÀ» °ÉÃļ­ ±â³ª°¡´Â °æ¿ì ºÎºÐÀϽÄ(´ÞÀÇ ¹Ý¿µÀÌ Áö±¸¿¡ µµ´Þ)
* ´ÞÀÌ Áö±¸ ºÐ¿µ¿¡ °ÉÃļ­ Áö³ª°¡´Â °æ¿ì ºÎºÐ¿ù½Ä
* Penumbra: Áö±¸³ª ´ÞÀÇ ¹Ý¿µ(±×¸²ÀÚ)
* Umbra: Áö±¸³ª ´ÞÀÇ º»¿µ(±×¸²ÀÚ)
* Antumbra: ¹ÝÀ½¿µ, º»¿µÀÇ ¿ª±×¸²ÀÚ(?)
</div>
<TABLE CELLPADDING=3 CELLSPACING=1 BORDER=0 WIDTH=800>
<TR><TD COLSPAN=3>new moon</TD><TD COLSPAN=3>full moon</TD><TD COLSPAN=3 class=bb>2'nd full moon (blue moon)</TD></TR>
<TR>
<TD>date</TD><TD>time</TD><TD>eclipse</TD>
<TD>date</TD><TD>time</TD><TD>eclipse</TD>
<TD class=bb>date</TD><TD class=bb>time</TD><TD class=bb>eclipse</TD>
</TR>
___END;

foreach(
$bluemoon AS $k=>$arr)
{
  
$tr $fr $er FALSE;
  list(
$_pyear) = explode('-',$arr[0][0]);
  
$class = ($_tyear == $_pyear) ? 'class=dayyear' '';

  if(
$solareclipse[$k])
  {
    echo 
"<TR $class><TD>".$solareclipse[$k][0].'</TD><TD>'.$solareclipse[$k][1].'</TD><TD>'.$solareclipse[$k][2].'</TD>';
    
$tr TRUE;
  }

  if(
$arr[0][2] != 'N')
  {
    if(!
$tr) echo "<TR $class><TD>-</TD><TD>-</TD><TD>-</TD>";
    echo 
'<TD>'.$arr[0][0].'</TD><TD>'.$arr[0][1].'</TD><TD>'.$arr[0][2].'</TD>';
    
$tr $fr TRUE;
  }
  if(
$arr[1])
  {
    if(!
$tr) echo "<TR $class><TD>-</TD><TD>-</TD><TD>-</TD>";
    if(!
$fr) echo '<TD>'.$arr[0][0].'</TD><TD>'.$arr[0][1].'</TD><TD>-</TD>'// first moon
    
$eclipse = ($arr[1][2]=='N') ? '-' $arr[1][2];
    echo 
'<TD>'.$arr[1][0].'</TD><TD>'.$arr[1][1].'</TD><TD>'.$eclipse.'</TD></TR>'."\n"// blue moon
    
$tr $fr $er TRUE;
  }
  if(!
$tr) continue;
  if(!
$fr) echo '<TD>-</TD><TD>-</TD><TD>-</TD>';
  if(!
$er) echo '<TD>-</TD><TD>-</TD><TD>-</TD></TR>'."\n";
}
echo 
"</TABLE><HR width=90% align=left>\n";

//echo '<SPAN class=pre>'."\n";
echo 'test calendar::_mktime() to calendar::_date()'."\n";
echo 
'-4100-02-29 00:00:00 to '.calendar::_date('Y-m-d H:i:s',calendar::_mktime(0,0,0,2,29,-4100)).' '.calendar::_mktime(0,0,0,2,29,-4100) ."\n";
echo 
'-100-02-29 00:00:00 to '.calendar::_date('Y-m-d H:i:s',calendar::_mktime(0,0,0,2,29,-100))."\n";
echo 
'-111-02-29 00:00:00 to '.calendar::_date('Y-m-d H:i:s',calendar::_mktime(0,0,0,2,29,-111))."\n";
echo 
'0000-02-29 00:00:00 to '.calendar::_date('Y-m-d H:i:s',calendar::_mktime(0,0,0,2,29,0000))."\n";
echo 
'1000-02-29 00:00:00 to '.calendar::_date('Y-m-d H:i:s',calendar::_mktime(0,0,0,2,29,1000))."\n";
echo 
'2000-02-29 00:00:00 to '.calendar::_date('Y-m-d H:i:s',calendar::_mktime(0,0,0,2,29,2000))."\n";
echo 
'3000-02-29 00:00:00 to '.calendar::_date('Y-m-d H:i:s',calendar::_mktime(0,0,0,2,29,3000))."\n";
echo 
'2037-12-20-20       to '.calendar::_date('Y-m-d H:i:s',calendar::_mktime(0,0,0,12,20-20,2037))."\n";
//echo '</SPAN>'."\n";


//print_r($bluemoon);

echo "<BR>\n<H3>$ymd(À½.$_ymd$w</H3>\n";
echo 
'<B>´ÞÀÇ À§Ä¡(12:00:00):</B>'."\n";
print_r($moon);
echo 
"\n\n";
echo 
'<B>žçÀÇ À§Ä¡(12:00:00):</B>'."\n";
print_r($sun);
echo 
"\n\n";
echo 
"<B>À½·Â °è»ê:</B> $_ymd\n";
print_r($lunar);
echo 
"\n\n";
echo 
"<B>º°ÀÚ¸®:</B>\n";
print_r($zodiac);
echo 
"<HR width=90% align=left>\n\n";

echo <<<__END
<PRE class=pre>
## lunar object -- get moon position or sun <-> moon, constellation, eclipses
##
## [author]
##  - Chilbong Kim, <san2(at)linuxchannel.net>
##  - http://linuxchannel.net/
##
## [changes]
##  see http://ftp.linuxchannel.net/devel/php_lunar/
##
## [conjunction error by approximative method]
##  - avg: -6538 seconds(+598 seconds, -11787 seconds)
##
## [conjunction error by approximative method day patch]
##  - avg: -368 seconds(+592 seconds, -1081 seconds)
##  - but, wrong day not exists :)
##
## [valid date]
##  - solar : 1902-01-10 - 2038-01-18
##  - lunar : 1901-12-01 - 2037-12-14
##
## [support date]
##  - unix timestamp base: 1902-01-01 00:00:00 <= date <= 2037-12-31 23:59:59 (guess)
##  - JD(Julian Day) base: BC 4713-01-01 12:00 GMT <= Gregorian date <= AD 9999 (guess)
##
## [download & online source view]
##  - http://ftp.linuxchannel.net/devel/php_lunar/
##  - http://ftp.linuxchannel.net/devel/php_calendar/
##
## [demo]
##  - http://linuxchannel.net/gaggle/lunar.php
##
## [docs]
##  - http://linuxchannel.net/docs/lunar.txt
##
## [study]
##  - http://www.kao.re.kr/html/study/qna/index.html
##  - http://sunearth.gsfc.nasa.gov/eclipse/SEsaros/SEsaros.html
##  - Synodic Month (new moon to new moon)     29.53059 days  = 29d 12h 44m (A)
##  - Draconic Month (node to node)            27.21222 days  = 27d 05h 06m (B)
##  - Anomalistic Month (perigee to perigee)   27.55455 days  = 27d 13h 19m
##  - (223 * A) = 6585.36 days, (242 * B) = 6585.32 days 
##  - 1 Saros = 6585.32 days = 18 years 11 days 8 hours
## 
## [eclipses]
##  - Solar Eclipses: T(Total), A(Annular), H(Hybrid(Annular/Total)), P(Partial)
##  - Lunar Eclipses: t(Total), p(Umbral(Partial)), n(Penumbral)
##
## [eclipses(e) by this program]
##  - S A 104 0.010582273616323 1.06751983653440(1.067743)
##  - S T  91 0.014674627401046 1.04166992331860
##  - S H   6 0.210833791736160 0.96121766199154(0.964180)
##  - S P 106 0.829402137331320 1.59530999819400
##  - L t 114 0.010630181434784 0.52538271749109(0.527908)
##  - L p  85 0.294681791935650 1.14183526374750
##  - L n 111 0.832900661071600 1.57436507046800(1.578244)
##
## [reference]
##  - http://user.chollian.net/~kimdbin/re/moonpos.html
##  - http://zimmer.csufresno.edu/~fringwal/skycalc.c
##  - http://williams.best.vwh.net/sunrise_sunset_example.htm
##  - http://aa.usno.navy.mil/faq/docs/SunApprox.html
##  - ftp://ssd.jpl.nasa.gov/pub/eph/export/C-versions/hoffman/
##  - http://www.linuxchannel.net/docs/solar-24terms.txt
##  - http://www.stjarnhimlen.se/english.html  // good 
##  - http://www.stargazing.net/kepler/ // good
##  - http://sunearth.gsfc.nasa.gov/eclipse/eclipse.html // good
##  - http://sunearth.gsfc.nasa.gov/eclipse/phase/phasecat.html
##  - http://sunearth.gsfc.nasa.gov/eclipse/phase/phase2001gmt.html
##  - http://sunearth.gsfc.nasa.gov/eclipse/LEvis/LEaltitude.html
##  - http://sunearth.gsfc.nasa.gov/eclipse/resource.html
##  - http://www.mreclipse.com/Special/SEprimer.html // Solar Eclipses for Beginners
##  - http://www.mreclipse.com/Special/LEprimer.html // Lunar Eclipses for Beginners
##  - http://www.mreclipse.com/MrEclipse.html // for Beginners
##  - http://astronote.org/
##  - http://myhome.naver.com/dudwn1109/appearance/solor_eclipse.htm
##  - http://www.kao.re.kr/html/study/
</PRE>
__END;

echo 
"\n</BODY>\n</HTML>";
return;
?>

Page loading: 0.05(server) + (network) + (browser) seconds