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 2019
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  0305 1327  0517 1349  0406 1235  0536 1521  0450 1622  0416 1840  0346 1956  0530 2119  0834 2112  1013 2027  1141 1954  1154 2039
02  0416 1355  0608 1439  0453 1328  0601 1625  0509 1729  0442 1953  0432 2103  0652 2153  0958 2135  1131 2058  1237 2051  1226 2144
03  0522 1428  0653 1535  0531 1426  0623 1730  0528 1837  0514 2107  0529 2159  0815 2222  1117 2200  1247 2133  1320 2150  1252 2250
04  0625 1508  0731 1633  0604 1528  0644 1836  0549 1947  0553 2215  0638 2247  0939 2248  1237 2229  1353 2216  1354 2255  1313 2356
05  0723 1553  0801 1736  0632 1631  0704 1942  0613 2059  0644 2317  0756 2325  1059 2312  1350 2301  1453 2307  1423 2359  1331     
06  0811 1644  0827 1840  0656 1736  0725 2051  0642 2210  0746       0917 2355  1219 2335  1500 2339  1541       1447       1349 0100
07  0853 1742  0851 1943  0718 1840  0746 2200  0717 2321  0856 0008  1038       1335 2359  1602       1620 0003  1507 0105  1407 0207
08  0929 1842  0912 2049  0739 1945  0811 2311  0800       1014 0049  1157 0020  1450       1656 0022  1652 0104  1526 0211  1426 0312
09  0959 1944  0933 2153  0758 2052  0841       0852 0025  1132 0123  1315 0044  1601 0027  1741 0114  1718 0208  1544 0315  1447 0420
10  1024 2049  0953 2300  0819 2159  0918 0020  0957 0121  1251 0151  1431 0106  1707 0101  1818 0212  1741 0312  1602 0422  1513 0530
11  1046 2152  1015       0841 2308  1004 0128  1108 0209  1408 0215  1546 0130  1807 0140  1848 0313  1801 0418  1621 0528  1544 0641
12  1106 2258  1038 0007  0908       1059 0229  1225 0246  1526 0238  1658 0156  1857 0227  1912 0418  1820 0522  1644 0637  1622 0752
13  1127       1106 0117  0940 0017  1206 0321  1343 0317  1641 0300  1809 0225  1940 0319  1934 0522  1838 0627  1712 0747  1713 0857
14  1148 0003  1142 0229  1020 0127  1320 0406  1503 0344  1757 0324  1913 0259  2015 0419  1954 0626  1856 0734  1746 0857  1815 0957
15  1211 0112  1227 0339  1109 0233  1439 0443  1621 0409  1910 0352  2011 0341  2044 0522  2013 0732  1917 0840  1829 1005  1925 1044
16  1238 0223  1323 0447  1210 0333  1600 0514  1740 0432  2020 0424  2101 0431  2108 0626  2032 0836  1941 0949  1921 1106  2043 1123
17  1310 0335  1432 0545  1322 0425  1722 0540  1857 0456  2123 0502  2140 0526  2129 0731  2051 0942  2011 1057  2025 1200  2201 1154
18  1350 0450  1550 0635  1441 0508  1842 0605  2014 0522  2218 0546  2213 0627  2148 0834  2113 1048  2047 1206  2136 1245  2322 1221
19  1443 0601  1713 0716  1604 0543  2002 0629  2127 0551  2304 0639  2240 0732  2206 0940  2138 1156  2131 1311  2254 1320       1244
20  1548 0707  1838 0749  1728 0613  2120 0655  2235 0626  2342 0737  2304 0835  2226 1044  2209 1305  2228 1409       1349  0039 1306
21  1702 0802  2000 0817  1850 0641  2236 0724  2335 0708       0838  2324 0941  2246 1150  2249 1411  2335 1500  0013 1414  0159 1327
22  1824 0846  2121 0842  2011 0706  2347 0755       0756  0011 0944  2343 1044  2310 1258  2339 1517       1542  0134 1437  0316 1350
23  1947 0923  2238 0907  2129 0732       0832  0025 0850  0036 1047       1149  2338 1405       1613  0049 1616  0253 1500  0436 1418
24  2109 0953  2353 0933  2245 0758  0049 0917  0107 0951  0059 1152  0002 1255       1516  0039 1702  0210 1644  0415 1524  0552 1451
25  2227 1019       1001  2357 0827  0145 1009  0142 1053  0119 1258  0021 1401  0012 1623  0153 1744  0332 1710  0535 1549  0705 1532
26  2343 1043  0104 1031       0901  0231 1104  0210 1157  0138 1402  0043 1512  0056 1728  0312 1817  0456 1734  0656 1619  0810 1620
27       1106  0212 1105  0102 0942  0308 1205  0233 1303  0158 1511  0108 1622  0153 1824  0437 1845  0518 1658  0813 1656  0905 1718
28  0056 1131  0311 1147  0201 1028  0339 1308  0254 1407  0219 1619  0140 1734  0301 1910  0601 1910  0642 1723  0924 1742  0950 1822
29  0207 1159             0250 1119  0406 1412  0313 1513  0242 1732  0220 1842  0421 1948  0727 1934  0804 1752  1025 1834  1026 1927
30  0314 1231             0332 1217  0429 1517  0333 1619  0310 1844  0310 1944  0544 2020  0850 1959  0923 1826  1114 1934  1053 2035
31  0419 1307             0507 1417             0353 1729             0415 2038  0710 2048             1037 1906             1116 2140

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_riset.zip
Archive:  moon_riset.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
    12642  2015-03-08 12:17   MoonRiSet.cls.php
     2122  2012-01-09 11:20   table.php
     2582  2012-01-15 13:35   world.php
---------                     -------
    17346                     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 8. 3. 2015: download (5.4 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