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 2025
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  0940 1736  0902 2055  0722 1956  0737       0739 0043  1028 0116  1153 0005  1417 2315  1636 2323  1635       1453 0108  1340 0250
02  1006 1900  0916 2219  0736 2124  0809 0027  0849 0143  1145 0134  1303 0016  1530 2336  1728       1700 0030  1507 0229  1359 0417
03  1026 2024  0931 2345  0752 2253  0853 0151  1008 0224  1257 0148  1412 0028  1641       1807 0023  1719 0151  1522 0354  1424 0550
04  1042 2147  0947       0811       0953 0300  1128 0253  1407 0159  1522 0040  1749 0004  1836 0136  1735 0313  1539 0522  1501 0723
05  1056 2309  1007 0111  0836 0023  1106 0350  1245 0313  1516 0210  1633 0054  1847 0043  1858 0256  1749 0436  1601 0655  1554 0849
06  1110       1034 0237  0912 0149  1223 0425  1359 0328  1625 0221  1746 0112  1934 0137  1915 0419  1803 0601  1631 0829  1705 0958
07  1124 0032  1113 0400  1000 0306  1342 0449  1510 0341  1735 0234  1856 0136  2008 0243  1930 0543  1818 0729  1715 1000  1829 1046
08  1141 0156  1205 0512  1103 0406  1457 0507  1618 0352  1847 0249  2001 0207  2034 0400  1944 0707  1837 0859  1816 1117  1956 1119
09  1203 0323  1313 0607  1216 0450  1609 0521  1727 0403  1959 0309  2055 0252  2054 0522  1958 0832  1902 1032  1933 1214  2120 1142
10  1234 0450  1429 0648  1335 0521  1719 0533  1836 0414  2108 0335  2137 0351  2110 0645  2014 0959  1938 1204  2056 1253  2238 1159
11  1318 0611  1549 0716  1452 0543  1827 0543  1947 0427  2209 0411  2207 0502  2124 0808  2035 1129  2027 1327  2219 1320  2352 1212
12  1416 0720  1707 0736  1607 0559  1937 0554  2059 0443  2259 0500  2230 0620  2138 0930  2102 1258  2133 1433  2338 1339       1224
13  1530 0811  1821 0752  1719 0612  2046 0606  2210 0504  2337 0602  2248 0742  2152 1053  2141 1424  2250 1520       1353  0103 1236
14  1649 0847  1933 0804  1829 0623  2158 0619  2318 0533       0715  2303 0903  2209 1218  2234 1540       1553  0052 1406  0213 1248
15  1809 0913  2043 0815  1938 0634  2310 0636       0612  0004 0833  2317 1023  2230 1346  2343 1638  0011 1615  0203 1417  0324 1302
16  1927 0931  2152 0826  2047 0645       0659  0015 0705  0025 0954  2330 1144  2300 1513       1720  0132 1632  0313 1428  0434 1320
17  2039 0946  2301 0837  2158 0657  0020 0731  0101 0810  0041 1114  2345 1306  2343 1635  0101 1748  0248 1646  0423 1441  0546 1343
18  2150 0958       0850  2310 0712  0125 0813  0135 0925  0056 1233       1430       1746  0222 1808  0401 1657  0534 1456  0655 1413
19  2258 1008  0012 0907       0731  0219 0910  0200 1044  0109 1355  0003 1558  0040 1839  0343 1824  0512 1709  0645 1515  0759 1455
20       1019  0125 0928  0022 0756  0302 1019  0219 1205  0124 1519  0027 1726  0154 1917  0459 1837  0622 1721  0756 1540  0853 1549
21  0007 1031  0237 0956  0132 0831  0333 1138  0235 1326  0140 1647  0101 1847  0316 1943  0612 1849  0733 1734  0905 1613  0936 1654
22  0117 1045  0346 1037  0234 0919  0356 1300  0249 1449  0200 1818  0149 1954  0438 2002  0724 1900  0844 1749  1006 1658  1007 1806
23  0229 1104  0445 1133  0325 1022  0415 1423  0303 1613  0227 1947  0254 2042  0558 2017  0834 1912  0956 1809  1056 1755  1030 1922
24  0343 1128  0532 1243  0403 1137  0430 1549  0319 1743  0307 2105  0413 2116  0715 2029  0946 1926  1107 1836  1135 1902  1049 2038
25  0455 1202  0606 1405  0432 1300  0444 1715  0337 1915  0404 2206  0538 2140  0828 2041  1057 1943  1214 1913  1204 2015  1104 2155
26  0601 1250  0631 1533  0454 1426  0459 1845  0400 2048  0517 2248  0700 2157  0939 2052  1209 2005  1212 1901  1225 2132  1118 2312
27  0656 1354  0651 1701  0511 1554  0516 2017  0433 2215  0640 2317  0819 2211  1050 2105  1320 2034  1259 2002  1243 2249  1131     
28  0738 1512  0707 1828  0526 1722  0536 2153  0521 2327  0804 2337  0934 2223  1201 2120  1424 2115  1335 2112  1258       1145 0030
29  0807 1637             0541 1851  0604 2324  0626       0925 2353  1046 2234  1313 2138  1520 2208  1401 2228  1311 0007  1201 0153
30  0830 1804             0656 2122  0643       0744 0017  1040       1156 2246  1425 2203  1603 2315  1421 2347  1325 0127  1222 0320
31  0847 1930             0714 2255             0907 0052             1307 2259  1534 2236             1438                  1252 0450

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