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"]}";
Pozor, v použití existují mezi verzemi drobné rozdíly. Ale výsledky jsou pochopitelně stejné.
<?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"]}"; ?>
$moon = new MoonRiSet([$latitude [, $longitude [, $timezone]]]);
float $latitude
: zeměpisná šířka místa ve stupních, pokud není zadána, použije se výchozí hodnota ze systému (ini_get("date.default_latitude")
).
Šířka na jih od rovníku je záporné číslo.
float $longitude
: zeměpisná délka místa ve stupních, pokud není zadána, použije se výchozí hodnota ze systému: (ini_get("date.default_longitude")
).
Délka na západ od nultého poledníku je záporné číslo.
string $timezone
: časová zóna místa z PHP: List of Supported Timezones,
pokud není zadána, použije se výchozí hodnota ze systému: (ini_get("date.timezone")
).
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.
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
.
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.
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.
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.
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.