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 2018
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  1554 0653  1817 0809  1706 0638  2042 0729  2150 0648  2326 0718  2316 0755  2258 1002  2241 1228  2240 1350       1413  0022 1345
02  1658 0759  1935 0843  1824 0710  2151 0754  2253 0720       0808  2343 0856  2320 1108  2315 1339  2337 1453  0000 1446  0138 1408
03  1813 0854  2052 0913  1939 0738  2300 0820  2351 0756  0006 0904       1001  2344 1217  2356 1450       1548  0117 1514  0251 1432
04  1929 0940  2203 0940  2053 0804       0849       0837  0041 1005  0007 1105       1326       1558  0043 1633  0234 1539  0404 1456
05  2047 1017  2314 1005  2202 0828  0004 0923  0042 0925  0112 1106  0030 1211  0009 1438  0046 1659  0158 1711  0350 1603  0516 1523
06  2201 1047       1029  2311 0854  0104 1002  0128 1018  0139 1212  0052 1319  0039 1552  0149 1753  0315 1743  0506 1627  0625 1553
07  2313 1113  0021 1054       0922  0200 1045  0207 1115  0203 1318  0115 1429  0117 1704  0300 1837  0435 1811  0619 1653  0733 1628
08       1138  0126 1122  0015 0953  0248 1135  0240 1217  0226 1426  0140 1543  0204 1813  0419 1913  0553 1837  0732 1722  0833 1710
09  0022 1202  0229 1155  0117 1028  0330 1231  0309 1321  0248 1538  0209 1657  0300 1912  0539 1944  0711 1901  0840 1755  0929 1759
10  0129 1227  0327 1232  0215 1107  0407 1329  0335 1427  0312 1650  0243 1814  0410 2003  0701 2012  0826 1926  0946 1834  1016 1852
11  0234 1253  0423 1313  0306 1154  0440 1433  0359 1537  0340 1808  0325 1926  0527 2045  0819 2038  0941 1954  1044 1917  1054 1951
12  0336 1321  0512 1401  0352 1246  0507 1539  0423 1647  0412 1924  0419 2033  0649 2118  0936 2103  1051 2026  1135 2009  1127 2053
13  0438 1354  0555 1456  0433 1343  0532 1646  0447 1801  0452 2041  0523 2128  0809 2146  1050 2128  1158 2101  1219 2105  1155 2156
14  0535 1432  0634 1555  0508 1445  0556 1758  0513 1916  0539 2150  0638 2213  0929 2213  1201 2157  1259 2141  1256 2204  1220 2301
15  0628 1518  0708 1657  0538 1549  0621 1909  0542 2034  0639 2250  0757 2250  1045 2238  1309 2229  1353 2228  1325 2307  1242     
16  0717 1607  0737 1803  0605 1656  0646 2024  0618 2150  0748 2340  0917 2321  1158 2303  1411 2307  1440 2321  1351       1303 0005
17  0758 1703  0803 1908  0630 1805  0715 2139  0702 2302  0903       1035 2347  1309 2330  1509 2349  1521       1415 0011  1323 0112
18  0833 1804  0827 2017  0655 1914  0746 2255  0754       1022 0018  1150       1416 2358  1559       1554 0018  1437 0117  1345 0222
19  0905 1906  0851 2126  0720 2027  0823       0856 0005  1137 0051  1303 0011  1521       1643 0037  1623 0119  1459 0224  1410 0332
20  0933 2011  0916 2237  0746 2139  0910 0007  1007 0058  1253 0118  1413 0035  1620 0031  1721 0132  1648 0223  1521 0333  1441 0448
21  0959 2118  0942 2349  0813 2253  1005 0113  1120 0142  1404 0144  1521 0100  1715 0110  1753 0231  1712 0328  1545 0445  1519 0602
22  1023 2225  1012       0846       1107 0211  1236 0218  1515 0207  1626 0127  1803 0155  1821 0333  1734 0436  1613 0558  1606 0718
23  1046 2335  1046 0101  0927 0005  1218 0259  1349 0246  1622 0230  1729 0157  1844 0245  1845 0438  1756 0543  1646 0715  1704 0826
24  1110       1128 0213  1015 0114  1331 0338  1503 0312  1730 0255  1827 0232  1919 0341  1907 0543  1820 0654  1729 0828  1815 0926
25  1138 0046  1220 0321  1211 0317  1446 0412  1613 0336  1834 0322  1918 0311  1950 0442  1930 0651  1845 0806  1821 0940  1931 1015
26  1210 0200  1322 0423  1317 0412  1600 0441  1723 0400  1935 0354  2005 0358  2017 0543  1952 0759  1914 0919  1923 1042  2052 1053
27  1249 0314  1432 0517  1429 0458  1713 0507  1832 0425  2032 0431  2045 0451  2042 0649  2017 0908  1951 1033  2034 1134  2210 1124
28  1336 0428  1548 0601  1545 0536  1825 0530  1938 0451  2122 0514  2118 0548  2104 0754  2044 1020  1936 1044  2149 1217  2328 1151
29  1434 0536             1700 0608  1935 0554  2043 0520  2206 0602  2147 0649  2125 0900  2115 1131  2031 1150  2307 1252       1216
30  1543 0637             1816 0637  2044 0620  2142 0553  2244 0657  2212 0752  2147 1009  2153 1243  2134 1248       1320  0041 1239
31  1658 0728             1929 0704             2237 0632             2236 0856  2212 1117             2245 1334             0155 1302

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