Program nalezení východu, západu a přechodu Měsíce v zadaný den

Moon rise, set and transit - PHP Class

Náhrada za chybějící funkce date_moonrise() a date_moonset()

Zcela jednoduché použítí:

<?php
require_once("MoonRiSet.cls.php");
$moon = new MoonRiSet();
echo "Měsíc dnes vychází v {$moon->rise["hh:mm"]} a zapadá v {$moon->set["hh:mm"]}"
     .", přes místní poledník přejde v {$moon->transit["hh:mm"]}";
?>

Inicializace:

$moon = new MoonRiSet([$latitude [, $longitude [, $timezone]]]);

Při inicializaci se automaticky použije dnešní den pro výpočet, pokud chcete jiný den, použijte metodu setDate():

bool $moon->setDate($year, $month, $day);

Všechny parametry jsou typu int. Metoda vrací true v případě zdárného výpočtu okamžiku východu a západu Měsíce.

Čas východu, západu a přechodu Měsíce po výpočtu je k dispozici ve vícero formátech:

float $moon->rise["timestamp"];
string $moon->rise["hh:mm"];
string $moon->rise["hhmm"];

float $moon->set["timestamp"];
string $moon->set["hh:mm"];
string $moon->set["hhmm"];

float $moon->transit["timestamp"];
string $moon->transit["hh:mm"];
string $moon->transit["hhmm"];

Timestamp je unixová časová značka, běžně používaná v PHP. Ostatni formáty uvádějí vždy pouze hodiny a minuty jako textový řetězec. Někdy mohou nastat zvláštní případy, například v určený den Měsíc nezapadá, ale pouze vychází. Pak timestamp pro západ vraci true a ostatní formáty vrací mezery. Naopak, pokud v zadaný den Měsíc nevychází, ale pouze zapadá, vrací timestamp false a ostatní formáty vrací zase mezery. Ve vyšších zeměpisných šířkách Měsíc po celý den buď vůbec nezapadá, pak timestamp východu i západu vrací true, zbylé formáty vrací "****" a "**:**". Nebo Měsíc celý den nevyjde, timestamp obou hodnot pak vrací false, zbylé formáty vrací "----" a "--:--". Při univerzálním použití této třídy je tedy nutné vždy provádět testy na viditelnost, ted například if ($moon->rise["timestamp"] === false) a podobně. Přiklad použití je ve vzorovém programu world.php.

Ve vyšších zeměpisných šířkách může Měsíc vyjít či zapadnout i dvakrát za den. Druhý východ a západ jsou k dispozici obdobně:

float $moon->rise2["timestamp"];
string $moon->rise2["hh:mm"];
string $moon->rise2["hhmm"];

float $moon->set2["timestamp"];
string $moon->set2["hh:mm"];
string $moon->set2["hhmm"];

Pokud neexistuje druhý východ či západ, obsahují proměnné hodnotu false. Přiklad použití je ve vzorovém programu table.php. V našich šířkách není však třeba brát na toto ohled.

Východy a západy Měsíce v Praze pro celý letošní rok:


Rise and Set for the Moon for 2021
Latitude = 50.1°  Longitude = 14.4°  Timezone = Europe/Prague

       Jan.       Feb.       Mar.       Apr.       May        June       July       Aug.       Sept.      Oct.       Nov.       Dec.  
Day Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set  Rise  Set
     h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m   h m  h m
01  1831 0957  2131 0942  2033 0805       0837  0104 0842  0152 1116  0054 1236  0002 1454       1700  0018 1705  0154 1538  0328 1433
02  1947 1029  2250 1001  2157 0824  0050 0913  0204 0948  0214 1229  0109 1345  0021 1602  0035 1751  0129 1733  0314 1555  0454 1455
03  2105 1055       1020  2321 0845  0208 0958  0249 1101  0232 1341  0124 1452  0045 1709  0132 1832  0244 1756  0436 1612  0623 1522
04  2222 1117  0011 1041       0909  0315 1055  0323 1216  0248 1449  0140 1600  0116 1812  0238 1905  0403 1816  0602 1632  0754 1600
05  2341 1136  0133 1107  0044 0939  0408 1201  0348 1330  0303 1556  0158 1708  0156 1909  0352 1932  0523 1834  0731 1657  0918 1651
06       1155  0254 1138  0204 1016  0448 1314  0408 1441  0318 1703  0219 1815  0246 1956  0509 1954  0644 1852  0901 1729  1028 1758
07  0101 1215  0412 1218  0317 1104  0518 1427  0424 1551  0334 1811  0245 1921  0348 2034  0628 2012  0808 1911  1027 1812  1120 1917
08  0222 1237  0523 1310  0418 1203  0541 1540  0440 1659  0353 1919  0319 2022  0457 2105  0749 2030  0934 1933  1143 1910  1157 2039
09  0345 1305  0621 1413  0507 1311  0600 1651  0455 1806  0415 2025  0402 2115  0612 2129  0909 2048  1102 1959  1242 2020  1224 2200
10  0508 1339  0707 1525  0544 1424  0616 1800  0510 1913  0443 2130  0456 2159  0729 2150  1031 2108  1228 2035  1326 2139  1245 2317
11  0626 1424  0742 1639  0611 1539  0631 1908  0527 2020  0520 2228  0600 2234  0847 2207  1155 2131  1348 2123  1357 2258  1302     
12  0735 1523  0808 1755  0634 1651  0646 2015  0547 2128  0606 2319  0711 2302  1005 2225  1320 2200  1454 2223  1420       1317 0030
13  0829 1631  0829 1907  0652 1802  0703 2123  0611 2234  0704 2359  0825 2325  1124 2243  1441 2238  1546 2335  1438 0015  1331 0141
14  0912 1746  0847 2017  0709 1911  0721 2230  0642 2337  0809       0942 2344  1244 2303  1555 2329  1623       1454 0129  1346 0250
15  0943 1902  0904 2126  0725 2019  0742 2338  0721       0921 0031  1058       1407 2328  1656       1651 0052  1509 0240  1402 0359
16  1007 2015  0920 2233  0740 2127  0808       0811 0032  1035 0057  1215 0001  1530 2359  1744 0032  1713 0209  1523 0350  1422 0508
17  1026 2126  0936 2340  0757 2233  0842 0042  0910 0120  1152 0119  1335 0019  1650       1818 0146  1730 0326  1539 0459  1446 0616
18  1044 2234  0954       0816 2341  0925 0143  1018 0157  1309 0138  1456 0037  1801 0041  1845 0304  1746 0439  1556 0608  1518 0723
19  1100 2342  1014 0047  0839       1018 0236  1132 0227  1428 0155  1620 0059  1900 0137  1906 0422  1800 0551  1617 0718  1558 0825
20  1116       1040 0154  0909 0048  1122 0320  1248 0252  1550 0213  1745 0126  1944 0245  1923 0539  1815 0701  1643 0826  1648 0920
21  1132 0048  1113 0300  0946 0152  1233 0356  1407 0313  1716 0233  1905 0201  2016 0402  1939 0653  1831 0810  1717 0932  1748 1004
22  1151 0155  1154 0403  1033 0250  1350 0424  1528 0332  1843 0257  2014 0249  2041 0523  1954 0804  1850 0920  1800 1032  1855 1039
23  1214 0302  1248 0500  1132 0341  1511 0448  1651 0350  2009 0329  2108 0352  2101 0642  2009 0915  1913 1029  1854 1123  2006 1107
24  1242 0409  1353 0548  1241 0422  1632 0509  1817 0410  2127 0410  2148 0506  2118 0758  2026 1024  1942 1138  1956 1204  2119 1129
25  1319 0515  1507 0626  1357 0456  1757 0529  1947 0432  2230 0506  2217 0626  2134 0911  2047 1134  2019 1241  2105 1237  2233 1148
26  1406 0616  1626 0658  1518 0524  1924 0548  2116 0500  2317 0615  2239 0747  2149 1021  2112 1242  2106 1338  2217 1303  2348 1204
27  1506 0710  1748 0723  1641 0547  2053 0609  2239 0537  2352 0733  2258 0904  2205 1131  2144 1349  2203 1426  2332 1324       1220
28  1615 0754  1911 0745  1905 0707  2222 0634  2350 0625       0853  2314 1018  2223 1240  2224 1450  2309 1504       1342  0105 1236
29  1731 0829             2030 0727  2348 0706       0728  0017 1011  2329 1129  2246 1349  2316 1544       1535  0048 1358  0225 1255
30  1850 0858             2157 0747       0748  0044 0841  0037 1125  2345 1238  2314 1456       1629  0020 1559  0206 1415  0350 1319
31  2010 0922             2325 0810             0123 0958                  1347  2349 1601             0137 1520             0518 1350

Srovnejte s referenčními údaji na Astronomical Applications Department of the U.S. Naval Observatory pro tento rok. Rozdíl jedné minuty nehraje v tomto případě velkou roli. Navíc tato třída pracuje i s letním časem, proto jsou časy východu a západu Měsíce v tyto dny o hodinu posunuty oproti referenční tabulce.

Zkomprimovaný balíček obsahuje jak vlastní třídu, tak i dva vzorové programy:

unzip -l moon-rise-set.zip
Archive:  moon-rise-set.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
    12556  2020-11-24 08:20   MoonRiSet.cls.php
     2130  2020-11-24 08:30   table.php
     2680  2020-11-24 08:26   world.php
---------                     -------
    17366                     3 files

Program table.php vytváří výše uvedenou tabulku a program world.php zobrazuje východy a západy Měsíce v různých místech na světě pro dnešní den.

Verze z 24. 11. 2020: download (5.2 KiB)

Pro výpočet polohy Měsíce na obloze je použito zkrácených výpočtů dle Low precision formulae for planetary position, Flandern & Pulkkinen. Přesnost polohy je ±5' v rektascenzi a ±1' v deklinaci pro nejbližší století, to je zcela dostatečná přesnost pro výpočet východu a západu Měsíce. Pro podrobnější studium doporučuji knihu Oliver Montenbruck and Thomas Pfleger: "Astronomy on the Personal Computer", Springer (bohužel cena je 100$). Algoritmus výpočtu je i na Approximate astronomical positions.

Kontakt na autora:
kontakt