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 2023
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  1237 0230  1227 0508  1109 0402  1412 0530  1528 0425  1804 0323  1946 0229  2116 0414  2038 0747  1930 0934  1832 1130  1926 1144
02  1256 0345  1316 0606  1204 0453  1524 0550  1639 0438  1926 0341  2102 0309  2143 0547  2053 0914  1951 1100  1928 1229  2039 1211
03  1320 0459  1413 0654  1308 0533  1635 0605  1753 0450  2051 0403  2204 0405  2203 0721  2109 1039  2018 1223  2033 1313  2151 1231
04  1350 0609  1519 0730  1416 0602  1746 0618  1909 0504  2212 0435  2248 0521  2219 0851  2128 1204  2055 1340  2144 1346  2301 1246
05  1430 0715  1629 0758  1528 0625  1858 0631  2029 0519  2322 0522  2319 0649  2234 1017  2151 1326  2143 1446  2256 1409       1300
06  1522 0810  1740 0818  1638 0643  2011 0643  2152 0538       0626  2342 0820  2249 1141  2221 1444  2242 1538       1426  0009 1311
07  1622 0854  1850 0835  1750 0657  2129 0657  2315 0604  0014 0746  2359 0950  2306 1303  2301 1555  2350 1616  0007 1441  0118 1323
08  1729 0928  2000 0850  1900 0711  2249 0714       0641  0051 0914       1115  2325 1423  2353 1654       1643  0117 1453  0227 1335
09  1839 0953  2110 0903  2011 0723       0735  0031 0733  0118 1042  0014 1237  2350 1542       1740  0100 1704  0225 1505  0340 1349
10  1950 1013  2220 0915  2125 0736  0010 0803  0133 0841  0138 1207  0029 1357       1656  0054 1813  0212 1721  0335 1516  0456 1406
11  2059 1029  2335 0929  2241 0750  0130 0843  0217 1003  0153 1329  0044 1516  0023 1802  0203 1838  0322 1734  0446 1529  0616 1430
12  2208 1042       0944       0808  0240 0940  0249 1129  0208 1449  0101 1634  0106 1856  0314 1857  0431 1746  0601 1545  0737 1504
13  2319 1055  0052 1003  0001 0830  0335 1052  0313 1255  0222 1607  0122 1751  0201 1938  0425 1913  0541 1757  0719 1604  0853 1553
14       1108  0212 1028  0122 0902  0415 1215  0331 1418  0237 1726  0148 1903  0305 2009  0535 1926  0651 1809  0839 1631  0957 1659
15  0031 1123  0334 1105  0238 0947  0444 1343  0346 1540  0255 1845  0224 2006  0414 2032  0644 1937  0803 1822  0959 1710  1044 1820
16  0148 1140  0450 1158  0345 1049  0506 1510  0400 1700  0318 2001  0311 2057  0525 2050  0753 1949  0918 1838  1109 1804  1117 1948
17  0309 1202  0554 1309  0436 1207  0524 1634  0414 1820  0347 2112  0408 2136  0635 2104  0903 2001  1036 1900  1205 1914  1142 2116
18  0433 1233  0641 1435  0514 1335  0539 1758  0431 1941  0426 2212  0514 2205  0745 2117  1014 2015  1155 1930  1245 2036  1200 2241
19  0557 1318  0715 1608  0541 1506  0553 1920  0450 2101  0517 2300  0624 2226  0853 2129  1130 2032  1311 2012  1315 2202  1215     
20  0711 1421  0740 1740  0601 1634  0609 2042  0515 2216  0617 2335  0735 2243  1001 2140  1247 2056  1416 2110  1336 2328  1229 0004
21  0808 1543  0759 1908  0618 1801  0626 2203  0548 2325  0726       0845 2257  1112 2153  1405 2129  1506 2224  1353       1243 0125
22  0849 1714  0815 2033  0633 1925  0648 2323  0631       0836 0001  0954 2309  1224 2208  1519 2216  1543 2349  1408 0052  1259 0246
23  0918 1846  0830 2155  0649 2048  0716       0726 0020  0947 0021  1102 2321  1341 2227  1620 2321  1610       1422 0215  1319 0408
24  0939 2015  0845 2315  0705 2209  0753 0035  0830 0103  1056 0037  1211 2333  1459 2254  1707       1630 0116  1437 0338  1344 0531
25  0956 2140  0903       0724 2329  0840 0138  0940 0135  1205 0050  1323 2347  1618 2333  1742 0041  1646 0244  1454 0502  1417 0649
26  1012 2300  0924 0033  0848       0939 0228  1050 0158  1315 0103  1437       1730       1806 0210  1701 0410  1516 0626  1503 0800
27  1026       0950 0149  0920 0144  1045 0306  1201 0216  1425 0115  1557 0004  1828 0028  1825 0342  1716 0536  1544 0750  1601 0857
28  1042 0017  1024 0300  1000 0252  1156 0334  1311 0231  1540 0128  1719 0026  1911 0142  1841 0512  1732 0702  1622 0908  1709 0941
29  1100 0134             1052 0349  1307 0355  1421 0244  1659 0143  1838 0059  1942 0310  1857 0640  1651 0728  1714 1014  1821 1011
30  1122 0249             1154 0432  1417 0411  1532 0256  1822 0203  1947 0146  2004 0443  1912 0807  1716 0854  1816 1106  1934 1034
31  1151 0401             1302 0506             1646 0309             2039 0251  2022 0616             1748 1016             2045 1051

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