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 2024
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  2154 1105       0958       0833  0258 0947  0309 1122  0228 1448  0121 1648  0133 1934  0403 1933  0526 1818  0651 1615  0818 1534
02  2302 1117  0016 1011  0031 0853  0354 1053  0333 1248  0242 1612  0142 1813  0233 2016  0516 1947  0633 1828  0804 1633  0926 1618
03       1129  0130 1029  0147 0921  0436 1213  0352 1415  0258 1739  0209 1934  0345 2047  0627 1958  0742 1839  0918 1658  1023 1718
04  0010 1140  0246 1052  0301 1001  0506 1341  0407 1541  0316 1906  0248 2043  0500 2109  0736 2009  0851 1852  1029 1734  1107 1830
05  0120 1153  0404 1126  0407 1058  0529 1510  0422 1707  0339 2032  0341 2138  0615 2126  0843 2019  1002 1908  1134 1821  1139 1950
06  0233 1208  0518 1214  0459 1212  0547 1640  0436 1835  0411 2151  0446 2216  0729 2139  0952 2031  1115 1928  1226 1925  1202 2113
07  0350 1228  0620 1322  0538 1340  0602 1809  0453 2005  0456 2256  0600 2244  0838 2150  1101 2044  1228 1955  1306 2039  1220 2235
08  0510 1257  0708 1446  0605 1512  0617 1939  0514 2134  0555 2344  0717 2304  0947 2201  1213 2101  1339 2033  1335 2201  1235 2358
09  0629 1338  0741 1618  0626 1645  0633 2109  0541 2259  0705       0831 2319  1055 2212  1327 2123  1440 2126  1357 2325  1249     
10  0740 1436  0805 1752  0643 1816  0651 2239  0618       0820 0018  0943 2332  1203 2224  1440 2154  1529 2234  1414       1303 0121
11  0835 1554  0824 1923  0659 1946  0714       0709 0012  0935 0042  1052 2343  1314 2238  1549 2238  1605 2354  1429 0050  1319 0245
12  0915 1722  0840 2051  0714 2115  0746 0006  0812 0109  1048 0100  1200 2354  1427 2257  1647 2339  1632       1443 0215  1338 0413
13  0943 1854  0855 2217  0731 2243  0828 0125  0925 0150  1158 0114  1308       1542 2323  1733       1653 0120  1458 0342  1403 0543
14  1004 2023  0910 2343  0750       0924 0229  1039 0219  1307 0126  1418 0005  1656 2359  1806 0055  1709 0248  1516 0511  1439 0712
15  1021 2150  0928       0816 0010  1030 0318  1153 0239  1414 0137  1531 0018  1803       1830 0221  1724 0416  1538 0643  1531 0831
16  1035 2314  0949 0107  0851 0131  1143 0352  1304 0255  1524 0148  1645 0035  1858 0052  1850 0352  1739 0546  1608 0816  1637 0934
17  1050       1017 0228  0938 0242  1256 0416  1413 0308  1635 0200  1802 0057  1938 0202  1906 0523  1755 0716  1651 0943  1755 1018
18  1105 0036  1054 0344  1036 0338  1408 0434  1521 0319  1750 0214  1915 0128  2007 0326  1921 0652  1815 0848  1750 1054  1915 1049
19  1123 0158  1144 0448  1144 0419  1518 0448  1629 0330  1906 0233  2018 0211  2029 0456  1936 0822  1840 1022  1902 1148  2032 1111
20  1146 0319  1245 0539  1256 0449  1626 0501  1740 0342  2023 0258  2107 0313  2046 0627  1953 0953  1917 1152  2020 1224  2147 1128
21  1216 0438  1355 0616  1408 0511  1734 0512  1852 0354  2133 0334  2142 0430  2102 0757  2015 1125  2006 1310  2138 1250  2257 1141
22  1257 0551  1507 0643  1520 0527  1843 0522  2008 0410  2229 0425  2207 0558  2116 0926  2044 1254  2109 1411  2252 1308       1152
23  1351 0651  1619 0703  1629 0541  1954 0534  2126 0430  2311 0534  2226 0728  2132 1053  2124 1416  2222 1455       1323  0006 1202
24  1455 0739  1731 0719  1737 0552  2108 0548  2240 0459  2342 0655  2242 0856  2150 1221  2217 1526  2339 1526  0003 1335  0114 1214
25  1606 0813  1839 0732  1845 0603  2224 0604  2345 0540       0821  2256 1022  2213 1349  2323 1618       1547  0112 1346  0223 1226
26  1720 0838  1947 0743  1955 0613  2340 0627       0636  0003 0948  2311 1147  2245 1513       1655  0054 1603  0220 1356  0334 1242
27  1831 0857  2055 0754  2106 0625       0659  0035 0748  0020 1113  2327 1312  2328 1629  0036 1722  0206 1516  0328 1408  0447 1303
28  1942 0911  2204 0805  2220 0640  0051 0744  0112 0910  0035 1236  2346 1436       1731  0152 1741  0216 1527  0438 1421  0601 1331
29  2050 0924  2316 0817  2336 0658  0150 0844  0138 1035  0049 1359       1601  0025 1818  0305 1755  0324 1538  0550 1438  0713 1411
30  2157 0935                  0723  0236 0958  0158 1201  0104 1523  0011 1723  0133 1851  0416 1807  0431 1549  0704 1502  0814 1506
31  2306 0946             0050 0857             0214 1325             0045 1835  0247 1915             0541 1600             0904 1616

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
---------  ---------- -----   ----
    12657  2023-07-03 07:32   MoonRiSet.cls.php
     2130  2020-11-24 08:30   table.php
     2680  2020-11-24 08:26   world.php
---------                     -------
    17467                     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 3. 7. 2023: 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