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 2012
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  1114 0012  1103 0214  1024 0156  1314 0338  1435 0259  1730 0241  1856 0233  1957 0444  1939 0720  1852 0828  1809 0924  1841 0939
02  1136 0118  1143 0313  1115 0247  1426 0408  1553 0322  1851 0314  1958 0329  2027 0559  2002 0829  1919 0934  1856 1015  1942 1014
03  1201 0223  1232 0408  1216 0331  1543 0435  1713 0347  2008 0355  2049 0436  2052 0715  2025 0937  1952 1037  1950 1059  2047 1043
04  1231 0325  1328 0458  1323 0409  1700 0500  1836 0414  2117 0447  2127 0550  2114 0827  2050 1043  2029 1136  2049 1138  2153 1109
05  1306 0429  1434 0539  1435 0443  1822 0524  2000 0445  2212 0549  2159 0708  2135 0939  2119 1147  2112 1231  2151 1212  2302 1134
06  1349 0526  1546 0614  1552 0511  1945 0549  2121 0522  2257 0701  2226 0823  2157 1047  2151 1250  2201 1320  2258 1241       1157
07  1443 0619  1700 0645  1710 0536  2109 0618  2234 0609  2332 0816  2250 0938  2221 1153  2231 1346  2258 1402       1307  0011 1221
08  1545 0706  1818 0712  1831 0600  2231 0652  2336 0707       0933  2311 1048  2248 1259  2318 1440  2359 1440  0006 1330  0125 1246
09  1652 0745  1936 0736  1952 0625  2348 0734       0813  0000 1046  2332 1157  2318 1401       1528       1512  0117 1354  0240 1314
10  1806 0816  2056 0759  2115 0652       0823  0024 0926  0024 1157  2354 1304  2353 1503  0010 1608  0105 1541  0232 1419  0359 1347
11  1920 0844  2215 0823  2236 0722  0053 0924  0102 1040  0045 1306       1409       1559  0110 1643  0215 1606  0348 1447  0518 1429
12  2037 0909  2335 0849  2354 0757  0147 1031  0133 1152  0106 1411  0017 1514  0035 1649  0216 1714  0326 1630  0509 1519  0634 1523
13  2152 0932       0920       0839  0230 1141  0159 1303  0127 1518  0045 1615  0125 1735  0324 1742  0442 1655  0629 1558  0742 1625
14  2311 0954  0052 0957  0103 0932  0302 1254  0221 1410  0150 1621  0117 1714  0223 1814  0437 1807  0558 1722  0749 1645  0838 1739
15       1018  0207 1041  0204 1033  0330 1403  0241 1517  0215 1724  0156 1809  0325 1846  0550 1832  0719 1752  0901 1744  0925 1856
16  0028 1044  0311 1134  0251 1139  0354 1512  0301 1622  0243 1826  0241 1857  0434 1915  0708 1856  0840 1827  1003 1852  1002 2014
17  0147 1115  0407 1238  0329 1251  0415 1618  0322 1727  0317 1922  0334 1939  0544 1941  0825 1923  1001 1908  1051 2006  1032 2130
18  0303 1154  0453 1346  0400 1400  0436 1725  0345 1831  0358 2015  0435 2016  0658 2006  0946 1954  1114 2001  1131 2121  1057 2243
19  0416 1243  0528 1459  0427 1512  0456 1830  0411 1932  0447 2102  0539 2047  0812 2030  1104 2032  1220 2102  1203 2235  1120 2353
20  0520 1340  0557 1611  0449 1619  0517 1934  0442 2033  0542 2140  0649 2114  0928 2055  1221 2116  1314 2210  1230 2348  1143     
21  0612 1449  0622 1722  0510 1727  0540 2039  0518 2128  0645 2214  0800 2137  1045 2121  1329 2208  1356 2323  1254       1206 0100
22  0655 1601  0644 1832  0529 1834  0607 2140  0601 2218  0751 2243  0912 2200  1202 2152  1428 2311  1431       1316 0056  1231 0206
23  0729 1716  0705 1939  0549 1939  0640 2239  0652 2302  0859 2309  1026 2224  1319 2230  1518       1501 0034  1337 0205  1258 0309
24  0756 1829  0725 2047  0612 2044  0719 2333  0750 2339  1011 2332  1140 2249  1431 2317  1557 0019  1526 0147  1400 0309  1328 0412
25  0819 1940  0745 2151  0737 2247  0804       0852       1122 2354  1257 2317  1537       1628 0131  1548 0256  1425 0415  1405 0511
26  0839 2049  0807 2256  0805 2349  0856 0020  1000 0010  1236       1413 2349  1632 0012  1656 0243  1610 0405  1455 0518  1449 0605
27  0859 2155  0833 2359  0839       0957 0102  1108 0037  1351 0017  1530       1719 0116  1721 0355  1632 0512  1528 0619  1539 0656
28  0919 2302  0903       0920 0045  1100 0138  1220 0102  1509 0042  1640 0028  1757 0227  1744 0506  1555 0517  1606 0718  1634 0739
29  0941       0940 0059  1008 0139  1210 0208  1333 0126  1627 0112  1745 0119  1827 0341  1806 0614  1622 0623  1652 0810  1735 0815
30  1004 0007             1103 0225  1321 0235  1450 0149  1745 0149  1839 0219  1853 0456  1828 0723  1652 0727  1744 0857  1839 0847
31  1031 0111             1206 0304             1608 0214             1922 0328  1917 0608             1728 0827             1944 0915

Srovnejte s referenčními údaji na 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
 --------    ----   ----    ----
    12644  01-15-12 13:31   MoonRiSet.cls.php
     2122  01-09-12 11:20   table.php
     2582  01-15-12 13:35   world.php
 --------                   -------
    17348                   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 15.1.2012: 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