【PHP】日付から月齢と潮名(大潮や小潮)を計算する
ドリリウムは移転しました。
約5秒後に自動的にリダイレクトします。
日付から月齢と潮名を取得します。
月齢のおさらい
月齢は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;
}
さいごに
以上の計算を使ってこちらのサイトを作成しました。
こんな風に埋め込めます。
こちらを参考にさせていただきました。
ありがとうございます。