【PHP】日付から月齢と潮名(大潮や小潮)を計算する

日付から月齢と潮名を取得します。

月齢のおさらい

月齢は1から30までの数字で表され、1は新月、15が満月となる。

1と15の間の7と8は上弦の月、15と30の間の22と23は下弦の月となる。

潮名のおさらい

潮名には5種類あり、それぞれの意味は以下の通り。

  • 大潮:潮の干満の差が大きい、新月や満月の前後数日
  • 中潮:潮の干満の差が中程度
  • 小潮:潮の干満の差が小さい、上弦や下弦の月前後数日
  • 長潮:小潮の終わり
  • 若潮:小潮の直後、中潮の直前

潮の動き(干満の差)はおおよそ 大潮 > 中潮 > 若潮 ≧ 小潮 ≒ 長潮 となる。

月齢と潮名の対応

潮名に厳密な基準や定義はなさそうなものの、第五管区海上保安本部海洋情報部のWebサイトによると以下の通りとなるそうです。

  • 大潮:(月齢)1,2,14,15,16,17,29,30
  • 中潮:(月齢)3,4,5,6,12,13,18,19,20,21,27,28
  • 小潮:(月齢)7,8,9,22,23,24
  • 長潮:(月齢)10,25
  • 若潮:(月齢)11,26

日付から月齢を計算する

日付から月齢を計算するには以下の計算式を用います。

月齢 = (((年 – 11) % 19) * 11 + 定数 + 日) % 30

定数は月に応じて決まり、以下の通りです。

  • 1月3月:0
  • 2月4月5月:2
  • 6月:4
  • 7月:5
  • 8月:6
  • 9月:7
  • 10月:8
  • 11月:9
  • 12月:10

例えば、2018年6月6日であれば以下のように計算します。

月齢 = (((2018 – 11) % 19) * 11 + 4 + 6) % 30

計算結果は22となります。

しかし、この計算方法は簡易的な計算方法であり、僅かに誤差がでる可能性があります。調べると大変そうな計算式も見つけられるのですが、僕の用途ではこれで十分でした。

PHPを使った月齢の計算と潮名の判定

ここまで記載した通りでありますが、PHPでは以下のように記述しました。

$date = new DateTime();
$y = $date->format(‘Y’);  //年

$m = $date->format(‘m’);  //月

$d = $date->format(‘d’);  //日

$c = 0;  //定数

switch($m){
case 2:
case 4:
case 5:
$c = 2;
break;
case 6:
$c = 4;
break;
case 7:
$c = 5;
break;
case 8:
$c = 6;
break;
case 9:
$c = 7;
break;
case 10:
$c = 8;
break;
case 11:
$c = 9;
break;
case 12:
$c = 10;
break;
}

//計算
$age = ((($y – 11) % 19) * 11 + $c + $d) % 30;

$tide = “大潮”;
switch($moon + 1){
case 3:
case 4:
case 5:
case 6:
case 12:
case 13:
case 18:
case 19:
case 20:
case 21:
case 27:
case 28:
$tide = “中潮”;
break;
case 7:
case 8:
case 9:
case 22:
case 23:
case 24:
$tide = “小潮”;
break;
case 10:
case 25:
$tide = “長潮”;
break;
case 11:
case 26:
$tide = “若潮”;
break;
}

タイトルとURLをコピーしました