直角三角形
4桁までの好きな数↓
1辺の長さ:
1辺の長さ:
1辺の長さ:
の直角三角形
ツェラーの公式
曜日を調べたい日付↓
/ /
その日は
曜日です。
今日の年月日 20 / /
現在の時刻 : ;
4つの数で"10"を

ツェラーの公式についての考察



ツェラーの公式とは


1582年10月15日(金曜日)以降のある日付の曜日を求める公式だそうです。

今回私は古本屋さんで購入した「CGI&Perl ポケットリファレンス」を読んで初めてその存在を知りました。


詳しくはWikiさんで → ツェラーの公式 - Wikipedia

簡便化された式(引用)はこちら。



y → 西暦○○○○年、m → 月、d → 日。ただし、1月と2月は前年の13月、14月とする(y= y-1、m=m+12とする)。

h = ( y + [ y/4 ] - [ y / 100 ] + [ y / 400 ] + [ ( 13m + 8) / 5 ] + d ) mod 7

[ ]はxを超えない(x以下)の最大の整数、x mod 7はxを7で割った余りです。

h ={"日曜"、"月曜"、"火曜"、"水曜"、"木曜"、"金曜"、"土曜"}
→→  つまり、h = 0 のとき日曜、h = 1 のとき月曜(以下略)です。




実際に計算したり子供に説明してみて:ツェラーの公式改


子供の生年月日を入れて計算してみると、西暦を4で割ったり13に整数をかけて計算するのは正直面倒でした。なので、もっと実際の手による計算をもっと簡単にできないかと思って、改良してみました。


2000年から +y 年(前後100年未満)1,2月は前年の13,14月として計算

( y mod 7 + < y / 4 > mod 7 + 2*m mod 7 + < ( m + 1 ) * 3 / 5 > mod 7
+ d mod 7 + 1 ) mod 7


これは、modの計算が、そのまま足し算引き算ができることを利用しています。

この計算を使って、映画「秒速5センチメートル」で貴樹が明里に逢いに行ったとされる1995年3月4日を計算してみましょうか^^ 劇中では金曜日の設定でしたが。

y = 1995 - 2000 = -5;
m = 3;
d = 4;

h = ( -5 mod 7 + < ( -5 ) / 4 > mod 7 + 2 * 3 mod 7 + < ( 3 + 1 ) * 3 / 5 > mod 7 + 4 mod 7 + 1) mod 7
= ( -5 mod 7 + -2 mod 7 + 6 mod 7 + 2 mod 7 + 4 mod 7 + 1 ) mod 7
= ( -5 + ( -2 ) + 6 + 2 + 4 + 1 ) mod 7
= 6 mod 7
= 6

したがって、 h = 6 により、1995年3月4日は土曜日なのです!!!

しかも、式が簡単になってませんか?(強引)筆算しなくてもできますよね?(強引*2)

そんなことしなくても、カレンダーみれば一目瞭然なのですがw  →→  1995年カレンダー



上のほうに載せているツェラーの公式の計算のソース



以下、上に載せている、年月日を入力して曜日を計算するやり方のPHP混ざりソースを貼ってみます。デフォルトで今日の日付が入っています。各ページにincludeしています。

まんまですが。これおかしいって教えていただけると助かります。$fileには現在のページのファイル名を指定しています。

MSゴシックを入れているのはIEで崩れるのを防ぐためです。




<div id="zeller">

<form action="<?php echo $file;
?>" method="POST">

<table summary="ツェラーの公式">
<tr>
<th>ツェラーの公式</th>
</tr>
<tr>
<td>

曜日を調べたい日付↓

<br />

<input type="text" name="z_y" class="ymd" style='font-family : "MS ゴシック";' size="4" maxlength="4" value="


<?php

if ($_POST[z_y] != null){

$z_y = $_POST[z_y];
echo $_POST[z_y];

}

else {

$z_y = date("Y");
echo date("Y");
}

?>

" >

/

<input type="text" name="z_m" class="ymd" style='font-family : "MS ゴシック";' size="2" maxlength="2" value="
<?php

if ($_POST[z_m] != null){

$z_m = $_POST[z_m];
echo $_POST[z_m];

}

else {

$z_m = date("m");
echo date("m");

}
?>

" >

/

<input type="text" name="z_d" class="ymd" style='font-family : "MS ゴシック";' size="2" maxlength="2" value="

<?php

if ($_POST[z_d] != null){

$z_d = $_POST[z_d];
echo $_POST[z_d];

}

else {

$z_d = date("d");

echo date("d");

}
?>

">

<br />
<a href="<?php echo $file;
?>"><input type="submit" value="OK" name="zeller" class="ok2"></a>


</td>
</tr>

<tr>
<td>
<div align="center">

その日は
<br />

<input type="text" name="youbi" style='font-family : "MS ゴシック";' size="2" maxlength="2" value="


<?php


if($z_m == 1 || $z_m == 2) {
$z_y = $z_y - 1;
$z_m = $z_m + 12;
}
$mod = ($z_y + intval($z_y/4) - intval($z_y/100) + intval($z_y/400) +
intval((13*$z_m+8)/5) + $z_d) % 7;
$arr_youbi = array("日", "月", "火", "水", "木", "金", "土");
$youbi= $arr_youbi[$mod];

echo $youbi;


?>


" class="ymd">

曜日です。
<br />

</div>


</td>
</tr>

</table>

</form>

</div>

<!-- zeller -->



このページのTOPへ