EASTER - 부활절 날짜 계산 PHP/8.0.22

소스닫기 | 24절기 계산 | 음양력변환, 일출몰, 월출몰, 별자리, 일월식 계산 | 메시에 관측정보(실시간) | 메시에 관측정보(오늘전체) | deltaT 계산 | 부활절 날짜 계산
<?php
##
## source from php
##
function _easter($year)
{
  
$golden = ($year 19) + 1;    /* Golden number */

  
if($year 1583)
  {
    
$dom = ($year + ($year/4) + 5) % 7;  /* the "Dominical number" - finding a Sunday */
    
if ($dom 0$dom += 7;
    
$pfm = (- (11*$golden) - 7) % 30;  /* uncorrected date of the Paschal full moon */
    
if ($pfm 0$pfm += 30;
  }
  else
  {
    
$dom = ($year + ($year/4) - ($year/100) + ($year/400)) % 7;  /* the "Domincal number" */
    
if ($dom 0$dom += 7;
    
$solar = ($year-1600)/100 - ($year-1600)/400;  /* the solar and lunar corrections */
    
$lunar = ((($year-1400) / 100) * 8) / 25;
    
$pfm   = (- (11*$golden) + $solar $lunar) % 30;  /* uncorrected date of the Paschal full moon */
    
if ($pfm 0$pfm += 30;
  }

  if ((
$pfm==29) || ($pfm==28 && $golden>11))  /* corrected date of the Paschal full moon */
  
{
    
$pfm--;     /* - days after 21st March */
  
}

  
$tmp = ($pfm $dom) % 7;
  if (
$tmp 0$tmp += 7;

  
$easter  $pfm $tmp 1;  /* Easter as the number of days after 21st March */
  
$easter -= (int)calendar::isleap($year);  // patch san2@2024.11.08

  
if($easter 11)
  {
    
$m 3;
    
$d $easter 21;
  }
  else
  {
    
$m 4;
    
$d $easter 10;
  }

  
$JD calendar::getjd0($year,$m,$d,0);
  
$w  calendar::date('w',$JD,0);

  if(
$w$JD += ($w);  // not sunday

  
return calendar::date('m/d',$JD,0);
}

require_once 
'_lib/class.calendar.php';
require_once 
'_lib/class.astro.php';
require_once 
'_lib/class.meeus.php';
require_once 
'_lib/class.de405.php';
require_once 
'_lib/func.debug.php';

DE405::set_datadir($_SERVER['DOCUMENT_ROOT'].'/_lib');

$_self basename($_SERVER['SCRIPT_NAME']);
$title 'EASTER - 부활절 날짜 계산';
$phpv  'PHP/'.PHP_VERSION;

echo <<<___END
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>
$title</TITLE><P><H2>$title $phpv</H2>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<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 { font-size:10pt; }
-->
</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(isset(
$_GET['view']))
{
  echo 
'<A HREF="'.$_self.'">소스닫기</A>'.$menu.'<HR>'."\n";
  
highlight_file(basename($_self));
  return;
}

echo 
'<A HREF="'.$_self.'?view=1">소스보기</A>'.$menu.'<HR>'."\n";

$_y $_GET['_py'] ?? date('Y');
$y floor($_y/50) * 50 1;
?>
<style>TD { font-size: 10pt; }</style>
<!--
<FORM METHOD=get>
<INPUT TYPE=text NAME='_py' VALUE='<?=$_y?>' SIZE=5 MAXLENGTH=5>년(50년 단위, 1906~2037) <INPUT TYPE=submit VALUE='  계산하기(Submit)  '
><INPUT TYPE=reset VALUE='   reset   '>
</FORM>
//-->

<A HREF='<?=$_self?>?_py=1901'>1901~1950</A> |
<A HREF='<?=$_self?>?_py=1951'>1951~2000</A> |
<A HREF='<?=$_self?>?_py=2001'>2001~2037</A> | 유효기간: 1906 ~ 2037
<PRE>
UTC+0 기준
년도   춘분    보름        부활절  Psource
<?php
for($i=0$i<50$i++)
{
  
$JD calendar::getjd0($y,1,1,0);
  if(
$y 2037) break;
  list(
$r,$de,$df) = easter($JD);
  
$e  _easter($y);
  
$e .= ($r == $e) ? '' ' F';
  echo 
"$y  $de   $df   $r   $e\n";
  
$y++;
}

echo 
"</PRE></BODY>\n</HTML>";

return;
?>

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