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()

Nová verze k dispozici na GitHub a na Packagist

Instalace je pak triviální:

composer require jiri.jozif/moonriset

I použití je snadné:

use JiriJozif\Moonriset\Moonriset;

$mrs = new Moonriset(51.48, 0.0, "Europe/London"); //Royal Observatory, Greenwich
echo "Moon rises today at {$mrs->rise["hh_mm"]} and sets at {$mrs->set["hh_mm"]}";

Z historický důvodů je níže popis i starší verze

Pozor, v použití existují mezi verzemi drobné rozdíly. Ale výsledky jsou pochopitelně stejné.

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 2026
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  1335 0618  1618 0741  1519 0606  1913 0613  2038 0502  2250 0457  2236 0548  2149 0830  2056 1128  2039 1325  2232 1338       1238
02  1436 0735  1745 0803  1641 0625  2026 0625  2151 0520  2334 0548  2257 0700  2201 0945  2120 1252  2140 1434  2355 1400  0023 1252
03  1555 0833  1907 0820  1800 0640  2140 0639  2300 0544       0649  2314 0813  2214 1100  2154 1416  2255 1528       1417  0139 1306
04  1723 0914  2024 0835  1917 0653  2253 0655       0616  0007 0758  2328 0927  2230 1218  2242 1535       1606  0115 1432  0253 1321
05  1851 0942  2139 0847  2030 0706       0715  0003 0659  0031 0910  2341 1040  2250 1341  2347 1640  0018 1634  0232 1445  0407 1337
06  2014 1001  2252 0900  2145 0719  0005 0742  0054 0753  0051 1023  2353 1155  2317 1505       1730  0144 1654  0348 1459  0521 1358
07  2133 1017       0913  2258 0733  0113 0817  0135 0857  0107 1137       1311  2355 1629  0107 1805  0307 1711  0503 1514  0633 1424
08  2247 1030  0004 0928       0750  0212 0904  0205 1008  0121 1251  0007 1431       1747  0233 1829  0427 1725  0618 1532  0742 1500
09  2359 1042  0117 0947  0011 0812  0300 1002  0228 1122  0134 1408  0024 1556  0050 1848  0401 1849  0545 1738  0733 1554  0842 1545
10       1054  0229 1011  0122 0841  0337 1110  0246 1236  0147 1528  0047 1724  0203 1933  0526 1904  0702 1752  0845 1623  0932 1642
11  0110 1108  0338 1044  0226 0921  0404 1223  0301 1353  0203 1653  0119 1850  0330 2004  0647 1918  0818 1808  0952 1701  1009 1747
12  0221 1124  0439 1129  0322 1013  0425 1340  0315 1510  0222 1823  0205 2003  0500 2027  0806 1932  0935 1827  1049 1751  1038 1856
13  0333 1145  0530 1226  0405 1116  0442 1457  0329 1630  0249 1954  0310 2059  0628 2044  0923 1946  1050 1851  1135 1850  1100 2006
14  0444 1212  0609 1335  0438 1228  0457 1616  0343 1756  0328 2117  0432 2138  0753 2059  1040 2003  1201 1923  1209 1957  1117 2117
15  0550 1249  0638 1450  0503 1345  0511 1737  0401 1926  0423 2222  0602 2204  0913 2112  1156 2023  1305 2005  1235 2107  1132 2228
16  0648 1340  0700 1609  0522 1504  0525 1901  0424 2058  0539 2309  0733 2224  1030 2126  1309 2050  1358 2059  1255 2219  1145 2339
17  0734 1442  0718 1728  0538 1623  0541 2029  0456 2226  0706 2341  0858 2240  1146 2141  1417 2126  1439 2201  1312 2331  1157     
18  0809 1553  0733 1847  0552 1744  0600 2201  0543 2342  0835       1019 2254  1301 2159  1517 2212  1510 2311  1326       1211 0053
19  0835 1710  0746 2006  0605 1906  0626 2331  0647       1002 0004  1137 2307  1415 2221  1605 2310  1534       1339 0043  1227 0210
20  0855 1827  0759 2127  0620 2030  0704       0807 0037  1123 0021  1251 2321  1526 2251  1642       1552 0023  1353 0158  1248 0332
21  0911 1945  0813 2251  0637 2159  0756 0052  0934 0115  1239 0035  1405 2336  1631 2331  1710 0016  1608 0137  1408 0316  1317 0459
22  0925 2102  0831       0658 2328  0906 0157  1100 0141  1353 0048  1518 2355  1726       1732 0129  1621 0250  1426 0437  1358 0625
23  0938 2219  0854 0017  0727       1027 0243  1221 0200  1506 0101  1630       1810 0021  1749 0242  1635 0406  1451 0604  1457 0745
24  0951 2340  0925 0143  0808 0053  1151 0315  1338 0215  1618 0115  1739 0020  1843 0124  1803 0358  1649 0524  1526 0734  1614 0847
25  1006       1010 0304  0905 0207  1314 0338  1451 0228  1730 0131  1840 0053  1908 0233  1816 0513  1606 0544  1616 0858  1744 0933
26  1025 0103  1112 0413  1017 0303  1432 0355  1604 0241  1841 0152  1931 0137  1927 0347  1830 0629  1626 0710  1724 1009  1916 1003
27  1050 0229  1228 0505  1139 0343  1547 0408  1716 0254  1948 0219  2011 0232  1943 0502  1844 0749  1655 0838  1847 1102  2044 1026
28  1126 0356  1353 0541  1303 0411  1700 0421  1827 0308  2046 0255  2040 0337  1957 0617  1902 0911  1735 1005  2015 1138  2207 1043
29  1217 0516             1524 0531  1813 0433  1940 0326  2133 0343  2103 0448  2009 0732  1925 1036  1831 1123  2142 1204  2326 1059
30  1327 0621             1643 0547  1926 0446  2050 0348  2209 0441  2121 0602  2023 0848  1956 1202  1944 1223  2305 1223       1113
31  1450 0708             1758 0601             2155 0417             2136 0717  2038 1007             2107 1307             0042 1127

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