index.html 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <link href="../lib/main.css" rel="stylesheet" />
  6. <script src="../public/js/jquery.js"></script>
  7. <script src="../public/js/comm.js"></script>
  8. <script src="jquery-3.3.1.min.js"></script>
  9. <script src="julian.js"></script>
  10. <script src="lune.js"></script>
  11. <script src="suncalc.js"></script>
  12. <script src="./planet_position/js/planet-positions.js"></script>
  13. <script src="../studio/js/fixedsticky.js"></script>
  14. <script src="../guide/guide.js"></script>
  15. <link type="text/css" rel="stylesheet" href="../guide/guide.css" />
  16. <script src="../public/js/marked.js"></script>
  17. <!--获取语言-->
  18. <script>
  19. var g_language = "en";
  20. var g_currLink = "";
  21. function lang_init(strPage) {
  22. g_currLink = strPage;
  23. }
  24. function setLang(strLang) {
  25. g_language = strLang;
  26. setCookie("language", g_language, 365);
  27. window.location.assign(location.pathname + "?language=" + g_language);
  28. }
  29. </script>
  30. <script>
  31. var localString = new Array();
  32. localString["zh-cn"] = {
  33. and_another: "又 ",
  34. atitude: "纬度",
  35. BE: "佛历",
  36. bhumma: "周二",
  37. budha: "周三",
  38. canda: "周一",
  39. confirm: "确认",
  40. date: "日期",
  41. day: "日",
  42. days: "天 ",
  43. departure_in_detail: "起飞详情",
  44. dhamma_time: "会延续五千年的教法 ",
  45. eat: "进餐",
  46. gama_entry: "入村",
  47. guru: "周四",
  48. hori_ref_time: "蒙气差修正 ",
  49. kala: "适当的时间",
  50. language_select: "选择语言",
  51. left: "还剩下",
  52. loading: "载入中……",
  53. longitude: "经度",
  54. māsa: "月",
  55. mins: "分钟",
  56. month: "月 ",
  57. month_1: "月 ",
  58. months: "个月 ",
  59. my_loc: "我的位置",
  60. need_inform: "未告知其他比库",
  61. no_string: "不能",
  62. noon_time: "正午",
  63. noon_time: "正午",
  64. note: "注释",
  65. now_time: "现在",
  66. pacchā_māsa: "下个月",
  67. pakkha: "月相变化 ",
  68. past: "已过去",
  69. pubba_māsa: "上个月",
  70. ravi: "周日",
  71. saṃvacchara: "年",
  72. season: "季节 ",
  73. sec: "秒",
  74. sora: "周六",
  75. sukka: "周五",
  76. sun_height_degree: "正午太阳高度 ",
  77. time: "时间",
  78. twilight_time: "曙光",
  79. twilight_time: "曙光",
  80. vikala: "不适当的时间",
  81. week_day: "星期",
  82. year_0: "年",
  83. year_1: "年 ",
  84. years: "年 ",
  85. yes_string: "可以",
  86. timezone: "时区",
  87. local: "本地",
  88. loading: "载入中",
  89. sun_set: "日落",
  90. };
  91. localString["zh-tw"] = {
  92. and_another: "又 ",
  93. atitude: "緯度",
  94. BE: "佛曆",
  95. bhumma: "週二",
  96. budha: "週三",
  97. canda: "週一",
  98. confirm: "確認",
  99. date: "日期",
  100. day: "日",
  101. days: "天 ",
  102. departure_in_detail: "起飛詳情",
  103. dhamma_time: "會延續五千年的教法 ",
  104. eat: "進餐",
  105. gama_entry: "入村",
  106. guru: "週四",
  107. hori_ref_time: "蒙氣差修正 ",
  108. kala: "適當的時間",
  109. language_select: "選擇語言",
  110. left: "還剩下",
  111. loading: "載入中……",
  112. longitude: "經度",
  113. māsa: "月",
  114. mins: "分鐘",
  115. month: "月 ",
  116. month_1: "月 ",
  117. months: "個月 ",
  118. my_loc: "我的位置",
  119. need_inform: "未告知其他比庫",
  120. no_string: "不能",
  121. noon_time: "正午",
  122. noon_time: "正午",
  123. note: "註釋",
  124. now_time: "現在",
  125. pacchā_māsa: "下個月",
  126. pakkha: "月相變化 ",
  127. past: "已過去",
  128. pubba_māsa: "上個月",
  129. ravi: "週日",
  130. saṃvacchara: "年",
  131. season: "季節 ",
  132. sec: "秒",
  133. sora: "週六",
  134. sukka: "週五",
  135. sun_height_degree: "正午太陽高度 ",
  136. time: "時間",
  137. twilight_time: "曙光",
  138. twilight_time: "曙光",
  139. vikala: "不適當的時間",
  140. week_day: "星期",
  141. year_0: "年",
  142. year_1: "年 ",
  143. years: "年 ",
  144. yes_string: "可以",
  145. timezone: "時區",
  146. local: "本地",
  147. loading: "載入中",
  148. sun_set: "日落",
  149. };
  150. localString["default"] = {
  151. and_another: " and ",
  152. atitude: "Atitude",
  153. BE: "Buddhist Era ",
  154. bhumma: "Bhumma",
  155. budha: "Budha",
  156. canda: "Canda",
  157. confirm: "Confirm",
  158. date: "Date ",
  159. day: " day(s) ",
  160. days: " day(s) ",
  161. departure_in_detail: "departure in detail",
  162. dhamma_time: "5000 Years of the Buddha’s Dispensation ",
  163. eat: "eat",
  164. gama_entry: "entry the village",
  165. guru: "Guru",
  166. hori_ref_time: "horizontal refraction correct ",
  167. kala: "suitable time",
  168. language_select: "bhāsā",
  169. left: "Remains ",
  170. loading: "loading…",
  171. longitude: "Longitude",
  172. māsa: "māsa",
  173. mins: "(min)",
  174. month: "Month ",
  175. month_1: "- ",
  176. months: " month(s) ",
  177. my_loc: "attasmiṃ",
  178. need_inform: "without informing other Bhikkhu ",
  179. no_string: "cannot ",
  180. noon_time: "NOON",
  181. noon_time: "NOON",
  182. note: "Note",
  183. now_time: "NOW",
  184. pacchā_māsa: "pacchā-māsa",
  185. pakkha: "Lunar Phases ",
  186. past: "Passed ",
  187. pubba_māsa: "pubba-māsa",
  188. ravi: "Ravi",
  189. saṃvacchara: "saṃvacchara",
  190. season: "Season ",
  191. sec: "sec ",
  192. sora: "Sora",
  193. sukka: "Sukka",
  194. sun_height_degree: "Max solar altitude ",
  195. time: "Time",
  196. twilight_time: "dawn",
  197. twilight_time: "dawn",
  198. vikala: "unsuitable time",
  199. week_day: "Day",
  200. year_0: "saṃvacchara",
  201. year_1: "- ",
  202. years: " year(s) ",
  203. yes_string: "can ",
  204. timezone: "Timezone",
  205. local: "local",
  206. loading: "loading",
  207. sun_set: "sunset",
  208. };
  209. localString["en"] = {
  210. and_another: " and ",
  211. atitude: "Atitude",
  212. BE: "Buddhist Era ",
  213. bhumma: "Bhumma",
  214. budha: "Budha",
  215. canda: "Canda",
  216. confirm: "Confirm",
  217. date: "Date",
  218. day: " day(s) ",
  219. days: " day(s) ",
  220. departure_in_detail: "departure in detail",
  221. dhamma_time: "5000 Years of the Buddha’s Dispensation ",
  222. eat: "eat",
  223. gama_entry: "entry the village",
  224. guru: "Guru",
  225. hori_ref_time: "horizontal refraction correct ",
  226. kala: "suitable time",
  227. language_select: "Language",
  228. left: "Remains ",
  229. loading: "loading…",
  230. longitude: "Longitude",
  231. māsa: "māsa",
  232. mins: "(min)",
  233. month: "Month ",
  234. month_1: "- ",
  235. months: " month(s) ",
  236. my_loc: "my location",
  237. need_inform: "without informing other Bhikkhu ",
  238. no_string: "cannot ",
  239. noon_time: "NOON",
  240. noon_time: "NOON",
  241. note: "Note",
  242. now_time: "NOW",
  243. pacchā_māsa: "pacchā-māsa",
  244. pakkha: "Lunar Phases ",
  245. past: "Passed ",
  246. pubba_māsa: "pubba-māsa",
  247. ravi: "Ravi",
  248. saṃvacchara: "saṃvacchara",
  249. season: "Season ",
  250. sec: "sec",
  251. sora: "Sora",
  252. sukka: "Sukka",
  253. sun_height_degree: "Max solar altitude ",
  254. time: "time",
  255. twilight_time: "dawn",
  256. twilight_time: "dawn",
  257. vikala: "unsuitable time",
  258. week_day: "Day",
  259. year_0: "year",
  260. year_1: "- ",
  261. years: " year(s) ",
  262. yes_string: "can ",
  263. timezone: "Timezone",
  264. local: "local",
  265. loading: "loading",
  266. sun_set: "sunset",
  267. };
  268. localString["my"] = {
  269. and_another: " and ",
  270. atitude: "Atitude",
  271. BE: "Buddhist Era ",
  272. bhumma: "ဘုမ္မ",
  273. budha: "ဗုဓ",
  274. canda: "စန္ဒ",
  275. confirm: "Confirm",
  276. date: "Date ",
  277. day: " day(s) ",
  278. days: " day(s) ",
  279. departure_in_detail: "departure in detail",
  280. dhamma_time: "5000 Years of the Buddha’s Dispensation ",
  281. eat: "eat",
  282. gama_entry: "entry the village",
  283. guru: "ဂုရု",
  284. hori_ref_time: "horizontal refraction correct ",
  285. kala: "ကာလ",
  286. language_select: "ဘာသာ",
  287. left: "Remains ",
  288. loading: "loading…",
  289. longitude: "Longitude",
  290. māsa: "မာသ",
  291. mins: "(min)",
  292. month: "Month ",
  293. month_1: "- ",
  294. months: " month(s) ",
  295. my_loc: "အတ္တသ္မိံ",
  296. need_inform: "without informing other Bhikkhu ",
  297. no_string: "cannot ",
  298. noon_time: "မဇ္ဈန္ဟိက",
  299. noon_time: "မဇ္ဈန္ဟိက",
  300. note: "Note",
  301. now_time: "ပစ္စုပ္ပန္န",
  302. pacchā_māsa: "ပစ္ဆာ-မာသ",
  303. pakkha: "Lunar Phases ",
  304. past: "Passed ",
  305. pubba_māsa: "ပုဗ္ဗ-မာသ",
  306. ravi: "ရဝိ",
  307. saṃvacchara: "သံဝစ္ဆရ",
  308. season: "Season ",
  309. sec: "sec ",
  310. sora: "သောရ",
  311. sukka: "သုက္က",
  312. sun_height_degree: "Max solar altitude ",
  313. time: "Time",
  314. twilight_time: "အရုဏုဂ္ဂမန",
  315. twilight_time: "အရုဏုဂ္ဂမန",
  316. vikala: "ဝိကာလ",
  317. week_day: "Day",
  318. year_0: "year",
  319. year_1: "- ",
  320. years: " year(s) ",
  321. yes_string: "can ",
  322. timezone: "Timezone",
  323. local: "local",
  324. loading: "loading",
  325. sun_set: "sunset",
  326. };
  327. localString["si"] = {
  328. and_another: " ච ",
  329. atitude: "Atitude",
  330. BE: "බුද්ධ වර්ෂය ",
  331. bhumma: "භුම්ම",
  332. budha: "බුධ",
  333. canda: "චන්ද",
  334. confirm: "Confirm",
  335. date: "දිවස ",
  336. day: " දිවසා(නි) ",
  337. days: " දිවසා(නි) ",
  338. departure_in_detail: "departure in detail",
  339. dhamma_time: "සම්මා සම්බුද්ධස්ස සාසනං පට්ච-වස්ස-සහස්සානි පවත්තිස්සති ",
  340. eat: "eat",
  341. gama_entry: "entry the village",
  342. guru: "ගු‍රු",
  343. hori_ref_time: "horizontal refraction correct ",
  344. kala: "කාල",
  345. language_select: "භාෂාව",
  346. left: "අවසිට්ඨ ",
  347. loading: "ප්‍රවේශනය වෙනවා ",
  348. longitude: "Longitude",
  349. māsa: "මාස",
  350. mins: "(min)",
  351. month: "මාස ",
  352. month_1: "- ",
  353. months: " මාසා(නි) ",
  354. my_loc: "අත‍්තස‍්මිං",
  355. need_inform: "without informing other Bhikkhu ",
  356. no_string: "cannot ",
  357. noon_time: "මජ්ඣන්හික",
  358. noon_time: "මජ්ඣන්හික",
  359. note: "නෝට්ටුව ",
  360. now_time: "පච්චුප්පන්න",
  361. pacchā_māsa: "පච්ඡා-මාස",
  362. pakkha: "පක්ඛ ",
  363. past: "අතික්කන්ත ",
  364. pubba_māsa: "පුබ්බ-මාස",
  365. ravi: "රවි",
  366. saṃvacchara: "සංවච්ඡ‍ර",
  367. season: "උතු ",
  368. sec: "sec",
  369. sora: "සො‍ර",
  370. sukka: "සුක්ක",
  371. sun_height_degree: "Max solar altitude ",
  372. time: "time",
  373. twilight_time: "අ‍රුණුග්ගමන",
  374. twilight_time: "අ‍රුණුග්ගමන",
  375. vikala: "විකාල",
  376. week_day: "වා‍ර ",
  377. year_0: "සංවච්ඡ‍ර",
  378. year_1: "- ",
  379. years: " සංවච්ඡ‍රා(නි) ",
  380. yes_string: "can ",
  381. timezone: "Timezone",
  382. local: "local",
  383. loading: "loading",
  384. sun_set: "sunset",
  385. };
  386. var pali_month_name = [
  387. { id: "1", value: "jeṭṭha", season: "gimhāna", season_icon: "☀" }, //5.X-四-十五-心
  388. { id: "2", value: "asāḷha", season: "gimhāna", season_icon: "☀" }, //6.X-五-十五、十六-箕、斗
  389. { id: "3", value: "sāvana", season: "vassāna", season_icon: "☔" }, //7.X-六-十五-女
  390. { id: "4", value: "poṭṭhapāda", season: "vassāna", season_icon: "☔" }, //8.x-七-十五、十六-室、壁
  391. { id: "5", value: "assajuja", season: "vassāna", season_icon: "☔" }, //9.X-八-十五-樓
  392. { id: "6", value: "kattika", season: "vassāna", season_icon: "☔" }, //10.X-九-十五-昂
  393. { id: "7", value: "māgasira", season: "hemanta", season_icon: "❄" }, //11.X-十-十五-觜
  394. { id: "8", value: "phussa", season: "hemanta", season_icon: "❄" }, //12.X-十一-十五-鬼
  395. { id: "9", value: "māgha", season: "hemanta", season_icon: "❄" }, //1.X-十二-十五-星
  396. { id: "10", value: "phagguna", season: "hemanta", season_icon: "❄" }, //2.X-正月-十四、十五-張、異
  397. { id: "11", value: "citta", season: "gimhāna", season_icon: "☀" }, //3.X-二月-十五-角
  398. { id: "12", value: "vesākha", season: "gimhāna", season_icon: "☀" }, //4.X-三月-十五-氐
  399. ];
  400. var pali_nakkhatta_name = [
  401. { id: "0", value: "assayuja", name_zh: "娄宿" },
  402. { id: "1", value: "bharaṇī", name_zh: "胃宿" },
  403. { id: "2", value: "Kattikā", name_zh: "昂宿" },
  404. { id: "3", value: "rohiṇī", name_zh: "毕宿" },
  405. { id: "4", value: "magasira", name_zh: "觜宿" },
  406. { id: "5", value: "Addā", name_zh: "参宿" },
  407. { id: "6", value: "punabbasu", name_zh: "井宿" },
  408. { id: "7", value: "phussa", name_zh: "鬼宿" },
  409. { id: "8", value: "Asilesā", name_zh: "柳宿" },
  410. { id: "9", value: "maghā", name_zh: "星宿" },
  411. { id: "10", value: "pubbaphagguṇī", name_zh: "张宿" },
  412. { id: "11", value: "uttaraphagguṇī", name_zh: "翼宿" },
  413. { id: "12", value: "hattha", name_zh: "轸宿" },
  414. { id: "13", value: "cittā", name_zh: "角宿" },
  415. { id: "14", value: "sāti", name_zh: "亢宿" },
  416. { id: "15", value: "visākhā", name_zh: "氐宿" },
  417. { id: "16", value: "anurādhā", name_zh: "房宿" },
  418. { id: "17", value: "jeṭṭha", name_zh: "心宿" },
  419. { id: "18", value: "mūlā", name_zh: "尾宿" },
  420. { id: "19", value: "pubbāsāḷha", name_zh: "箕宿" },
  421. { id: "20", value: "uttarāsāḷha", name_zh: "斗宿" },
  422. { id: "21", value: "savaṇa", name_zh: "女宿" },
  423. { id: "22", value: "dhaniṭṭhā", name_zh: "虚宿" },
  424. { id: "23", value: "satabhisaja", name_zh: "危宿" },
  425. { id: "24", value: "pubbabhaddapadā", name_zh: "室宿" },
  426. { id: "25", value: "uttarabhaddapadā", name_zh: "壁宿" },
  427. { id: "26", value: "revatī", name_zh: "奎宿" },
  428. ];
  429. var horoscope_name = [
  430. { id: "0", value: "Aries", name_zh: "白羊", icon: "♈" },
  431. { id: "1", value: "Taurus", name_zh: "金牛", icon: "♉" },
  432. { id: "2", value: "Gemini", name_zh: "双子", icon: "♊" },
  433. { id: "3", value: "Cancer", name_zh: "巨蟹", icon: "♋" },
  434. { id: "4", value: "Leo", name_zh: "狮子", icon: "♌" },
  435. { id: "5", value: "Virgo", name_zh: "处女", icon: "♍" },
  436. { id: "6", value: "Libra", name_zh: "天秤", icon: "♎" },
  437. { id: "7", value: "Scorpio", name_zh: "天蝎", icon: "♏" },
  438. { id: "8", value: "Sagittarius", name_zh: "射手", icon: "♐" },
  439. { id: "9", value: "Capricornus", name_zh: "摩羯", icon: "♑" },
  440. { id: "10", value: "Aquarius", name_zh: "水瓶", icon: "♒" },
  441. { id: "11", value: "Pisces", name_zh: "双鱼", icon: "♓" },
  442. ];
  443. </script>
  444. <script>
  445. var current_phase = phase();
  446. console.log(current_phase); //输出到控制台
  447. //$("#title_text").html(localString[g_language].BE);
  448. var new_list = new Array(); //新月列表
  449. var first_list = new Array(); //上弦月列表
  450. var full_list = new Array(); //满月列表
  451. var last_list = new Array(); //下弦月列表
  452. var planets = new Array(); //
  453. var lunar_position = new Object();
  454. var g_coordinate_this = new Object();
  455. var g_now_date = new Date();
  456. var today = new Date();
  457. var start_day = new Date();
  458. var next_year = new Date();
  459. var sun_times = new Object();
  460. var curr_position = localStorage.getItem("local_position");
  461. if (curr_position) {
  462. g_coordinate_this.AT = curr_position.split("#")[0];
  463. g_coordinate_this.LT = curr_position.split("#")[1];
  464. g_coordinate_this.height = curr_position.split("#")[2];
  465. if (g_coordinate_this.AT >= 0) {
  466. var AT_string = angle_trans(g_coordinate_this.AT) + "N";
  467. } else {
  468. var AT_string = angle_trans(g_coordinate_this.AT) + "S";
  469. }
  470. if (g_coordinate_this.LT >= 0) {
  471. var LT_string = angle_trans(g_coordinate_this.LT) + "E";
  472. } else {
  473. var LT_string = angle_trans(g_coordinate_this.LT) + "W";
  474. }
  475. let height_string = g_coordinate_this.height + "M";
  476. $("#selected_position_string").html(AT_string + " " + LT_string + " " + height_string);
  477. } else {
  478. getLocation();
  479. }
  480. function show_time() {
  481. if ($("#input_time").val()) {
  482. today = new Date($("#input_time").val());
  483. } else {
  484. today = g_now_date;
  485. }
  486. lunar_phase_list_refresh();
  487. get_position(today);
  488. let d_earth_to_moon =
  489. lunar_position.position.x ^
  490. (2 + lunar_position.position.y) ^
  491. (2 + lunar_position.position.z) ^
  492. 2 ^
  493. 0.5;
  494. let d_earth_to_moon_0 = phase(today).distance;
  495. sun_times = SunCalc.getTimes(
  496. today,
  497. g_coordinate_this.AT,
  498. g_coordinate_this.LT,
  499. g_coordinate_this.height / 1000
  500. );
  501. sun_position = SunCalc.getPosition(today, g_coordinate_this.AT, g_coordinate_this.LT);
  502. moon_position = SunCalc.getMoonPosition(today, g_coordinate_this.AT, g_coordinate_this.LT);
  503. moon_Illumination = SunCalc.getMoonIllumination(today);
  504. $("#today_dawn").html(sun_times.dawn.toLocaleTimeString()); //破晓
  505. $("#today_solarNoon").html(sun_times.solarNoon.toLocaleTimeString()); //正午
  506. $("#today_sunset").html(sun_times.sunset.toLocaleTimeString()); //日落
  507. $("#today_sun_azimuth").html(angle_trans((sun_position.azimuth / Math.PI) * 180)); //太阳水平弧度
  508. $("#today_moon_azimuth").html(angle_trans((moon_position.azimuth / Math.PI) * 180)); //月亮水平弧度
  509. $("#today_moon_phase").html(phase(today).phase); //月相值
  510. $("#today_moon_percent").html(phase(today).illuminated); //月照度
  511. $("#today_moon_angle").html(angle_trans((moon_Illumination.angle / Math.PI) * 180)); //月相角
  512. $("#angle_sun_e_moon").html(
  513. angle_trans((Math.abs(Math.PI + sun_position.azimuth - moon_position.azimuth) / Math.PI) * 180)
  514. ); //月亮水平弧度
  515. $("#curr_time").html(today.toLocaleTimeString()); //当前时间
  516. $("#now_time").html(g_now_date.toLocaleTimeString()); //现在
  517. $("#curr_time_unix").html(today.getTime()); //時間戳
  518. let earth_angle_string = "";
  519. earth_angle_string += get_position(today).solar_position_angle + "——";
  520. earth_angle_string += get_position(today).solar_position_angle_round + "——";
  521. earth_angle_string += get_position(today).solar_station + "——";
  522. earth_angle_string += get_station_name(today).solar.icon;
  523. $("#earth_angle").html(earth_angle_string); //地球角度
  524. let moon_angle_string = "";
  525. moon_angle_string += get_position(today).lunar_position_angle + "——";
  526. moon_angle_string += get_position(today).lunar_position_angle_round + "——";
  527. moon_angle_string += get_position(today).lunar_station + "——";
  528. moon_angle_string += get_station_name(today).lunar.value;
  529. $("#moon_angle").html(moon_angle_string); //月亮角度——角度差算法
  530. let moon_angle_string2 = "";
  531. moon_angle_string2 += get_position(today).lunar_position_angle2 + "——";
  532. moon_angle_string2 += get_position(today).lunar_position_angle_round2 + "——";
  533. moon_angle_string2 += get_position(today).lunar_station2 + "——";
  534. moon_angle_string2 += get_station_name(today).lunar.value;
  535. $("#moon_angle2").html(moon_angle_string2); //月亮角度——向量差算法
  536. }
  537. //根据时间计算偏角,输出
  538. function get_position(date_time) {
  539. let planets_position = new Object();
  540. planets = window.lagrange.planet_positions.getPositions(date_time);
  541. //planets = global.planet_positions.getPositions(today);
  542. //console.log(planets)//输出到控制台
  543. earth_position = window.lagrange.planet_positions.getPositions(date_time)[3];
  544. lunar_position = window.lagrange.planet_positions.getPositions(date_time)[11];
  545. let lunar_position_angle = 0;
  546. let lunar_station = 0;
  547. let earth_position_angle = 0;
  548. let earth_station = 0;
  549. let earth_position_angle_round = 0;
  550. let lunar_position_angle_round = 0;
  551. //太阳相对地球的黄道偏角
  552. if (earth_position.position.y >= 0) {
  553. earth_position_angle = Math.atan2(earth_position.position.y, earth_position.position.x);
  554. } else {
  555. earth_position_angle =
  556. Math.PI * 2 + Math.atan2(earth_position.position.y, earth_position.position.x);
  557. }
  558. earth_position_angle_round = earth_position_angle / Math.PI / 2 + 0.5;
  559. earth_position_angle_round = earth_position_angle_round - Math.floor(earth_position_angle_round);
  560. earth_station = earth_position_angle_round * 12;
  561. planets_position.solar_station = earth_station;
  562. planets_position.solar_position_angle = earth_position_angle_round * Math.PI * 2;
  563. planets_position.solar_position_angle_round = earth_position_angle_round;
  564. //月球相对地球的黄道偏角——角度差算法
  565. lunar_position_angle_round = earth_position_angle_round + phase(date_time).phase;
  566. lunar_position_angle_round = lunar_position_angle_round - Math.floor(lunar_position_angle_round);
  567. lunar_position_angle = lunar_position_angle_round * Math.PI * 2;
  568. lunar_station = lunar_position_angle_round * 27;
  569. //月球相对地球的黄道偏角算法——向量差算法
  570. let lunar_to_earth = new Object();
  571. lunar_to_earth.y = lunar_position.position.y - earth_position.position.y;
  572. lunar_to_earth.x = lunar_position.position.x - earth_position.position.x;
  573. if (lunar_to_earth.y >= 0) {
  574. lunar_position_angle2 = Math.atan2(lunar_to_earth.y, lunar_to_earth.x);
  575. } else {
  576. lunar_position_angle2 = Math.PI * 2 + Math.atan2(lunar_to_earth.y, lunar_to_earth.x);
  577. }
  578. lunar_position_angle_round2 = lunar_position_angle2 / Math.PI / 2;
  579. //lunar_position_angle_round = lunar_position_angle_round - Math.floor(lunar_position_angle_round)
  580. lunar_position_angle2 = lunar_position_angle_round2 * Math.PI * 2;
  581. lunar_station2 = lunar_position_angle_round2 * 27;
  582. planets_position.lunar_station = lunar_station; //月站值【角度差算夹角】
  583. planets_position.lunar_position_angle = lunar_position_angle; //月站角【角度差算夹角】
  584. planets_position.lunar_position_angle_round = lunar_position_angle_round; //月站圆周比率【角度差算夹角】
  585. planets_position.lunar_station2 = lunar_station2; //月站值【矢量差算夹角】
  586. planets_position.lunar_position_angle2 = lunar_position_angle2; //月站角【矢量差算夹角】
  587. planets_position.lunar_position_angle_round2 = lunar_position_angle_round2; //月站圆周比率【矢量差算夹角】
  588. return planets_position;
  589. }
  590. //根据;
  591. function get_station_name(data_time) {
  592. //获取星象信息
  593. let solar_num = 0;
  594. let lunar_num = 0;
  595. solar_num = get_position(data_time).solar_station;
  596. solar_num = Math.floor(solar_num);
  597. lunar_num = get_position(data_time).lunar_station;
  598. lunar_num = Math.floor(lunar_num);
  599. let result = new Object();
  600. result.solar = horoscope_name[solar_num]; //黄道十二宫星象名称
  601. result.lunar = pali_nakkhatta_name[lunar_num]; //27星宿月站名称
  602. return result;
  603. }
  604. function getLocation() {
  605. //自动定位
  606. if (navigator.geolocation) {
  607. navigator.geolocation.getCurrentPosition(showPosition, showError);
  608. } else {
  609. $("#selected_position_string").html("Geolocation is not supported by this browser.");
  610. }
  611. }
  612. function showPosition(position) {
  613. alert("get cordinate success");
  614. g_coordinate_this.AT = position.coords.latitude; //纬度
  615. g_coordinate_this.LT = position.coords.longitude; //经度
  616. g_coordinate_this.height = position.coords.altitude; //海拔高度
  617. /*/手动输入
  618. var LT = Number($("#LT_°")[0].value);
  619. LT += Number($("#LT_’")[0].value) / 60;
  620. LT += Number($("#LT_”")[0].value) / 3600;
  621. LT = Number($("#WE")[0].value + LT);
  622. var AT = Number($("#AT_°")[0].value);
  623. AT += Number($("#AT_’")[0].value) / 60;
  624. AT += Number($("#AT_”")[0].value) / 3600;
  625. AT = Number($("#NS")[0].value + AT);
  626. if (AT != 0) {
  627. g_coordinate_this.LT = LT;
  628. g_coordinate_this.AT = AT;
  629. }*/
  630. let position_string =
  631. g_coordinate_this.AT + "#" + g_coordinate_this.LT + "#" + g_coordinate_this.height;
  632. localStorage.setItem("local_position", position_string);
  633. if (g_coordinate_this.AT >= 0) {
  634. var AT_string = angle_trans(g_coordinate_this.AT) + "N";
  635. } else {
  636. var AT_string = angle_trans(g_coordinate_this.AT) + "S";
  637. }
  638. if (g_coordinate_this.LT >= 0) {
  639. var LT_string = angle_trans(g_coordinate_this.LT) + "E";
  640. } else {
  641. var LT_string = angle_trans(g_coordinate_this.LT) + "W";
  642. }
  643. let height_string = g_coordinate_this.height + "M";
  644. $("#selected_position_string").html(AT_string + " " + LT_string + " " + height_string);
  645. $("#position_input").hide();
  646. }
  647. function showError(error) {
  648. switch (error.code) {
  649. case error.PERMISSION_DENIED:
  650. alert("定位失败,用户拒绝请求地理定位");
  651. break;
  652. case error.POSITION_UNAVAILABLE:
  653. alert("定位失败,位置信息是不可用");
  654. break;
  655. case error.TIMEOUT:
  656. alert("定位失败,请求获取用户位置超时");
  657. break;
  658. case error.UNKNOWN_ERROR:
  659. alert("定位失败,定位系统失效");
  660. break;
  661. }
  662. }
  663. function angle_trans(angle) {
  664. var angle_str = "";
  665. var num_d = Math.floor(angle);
  666. var num_m = Math.floor((angle - num_d) * 60);
  667. var num_s = Math.round((angle - num_d) * 60 - num_m);
  668. if (num_d != 0) {
  669. angle_str += num_d + "°";
  670. }
  671. if (num_m != 0) {
  672. angle_str += num_m + "’";
  673. }
  674. if (num_s != 0) {
  675. angle_str += num_s + "”";
  676. }
  677. return angle_str;
  678. }
  679. function input_position() {
  680. $("#position_input").show();
  681. }
  682. var g_event_list_arr = new Array();
  683. function get_event_arr() {
  684. let today = new Date();
  685. let date = new Date();
  686. for (i = -360; i < 360; i++) {
  687. date.setTime(today.getTime() + i * 3600 * 24 * 1000);
  688. let info_obj = new Object();
  689. info_obj.id = "dawn" + i;
  690. info_obj.title = localString[g_language].twilight_time;
  691. info_obj.start = SunCalc.getTimes(
  692. date,
  693. g_coordinate_this.AT,
  694. g_coordinate_this.LT,
  695. g_coordinate_this.height / 1000
  696. ).dawn;
  697. g_event_list_arr.push(info_obj);
  698. info_obj = new Object();
  699. info_obj.id = "noon" + i;
  700. info_obj.title = localString[g_language].noon_time;
  701. info_obj.start = SunCalc.getTimes(
  702. date,
  703. g_coordinate_this.AT,
  704. g_coordinate_this.LT,
  705. g_coordinate_this.height / 1000
  706. ).solarNoon;
  707. g_event_list_arr.push(info_obj);
  708. info_obj = new Object();
  709. info_obj.id = "sunset" + i;
  710. info_obj.title = localString[g_language].sun_set;
  711. info_obj.start = SunCalc.getTimes(
  712. date,
  713. g_coordinate_this.AT,
  714. g_coordinate_this.LT,
  715. g_coordinate_this.height / 1000
  716. ).sunset;
  717. g_event_list_arr.push(info_obj);
  718. }
  719. next_year.setDate(start_day.getDate() + 360);
  720. start_day.setDate(today.getDate() - 360);
  721. last_list = phaseRange(start_day, next_year, LAST); //获取下弦月列表
  722. for (i_last in last_list) {
  723. info_obj = new Object();
  724. info_obj.id = "last_moon" + i_last;
  725. info_obj.title = "🌗" + get_station_name(last_list[i_last]).lunar.value;
  726. info_obj.start = last_list[i_last];
  727. g_event_list_arr.push(info_obj);
  728. }
  729. new_list = phaseRange(start_day, next_year, NEW); //获取新月列表
  730. for (i_new in new_list) {
  731. info_obj = new Object();
  732. info_obj.id = "new_moon" + i_new;
  733. info_obj.title = "🌑" + get_station_name(new_list[i_new]).lunar.value;
  734. info_obj.start = new_list[i_new];
  735. g_event_list_arr.push(info_obj);
  736. }
  737. first_list = phaseRange(start_day, next_year, FIRST); //获取上弦月列表
  738. for (i_first in first_list) {
  739. info_obj = new Object();
  740. info_obj.id = "first_moon" + i_first;
  741. info_obj.title = "🌓" + get_station_name(first_list[i_first]).lunar.value;
  742. info_obj.start = first_list[i_first];
  743. g_event_list_arr.push(info_obj);
  744. }
  745. full_list = phaseRange(start_day, next_year, FULL); //获取满月列表
  746. for (i_full in full_list) {
  747. info_obj = new Object();
  748. info_obj.id = "full_moon" + i_full;
  749. info_obj.title = "🌕" + get_station_name(full_list[i_full]).lunar.value;
  750. info_obj.start = full_list[i_full];
  751. g_event_list_arr.push(info_obj);
  752. }
  753. /*console.log(last_list); //输出到控制台
  754. console.log(new_list); //输出到控制台
  755. console.log(first_list); //输出到控制台
  756. console.log(full_list); //输出到控制台*/
  757. }
  758. get_event_arr();
  759. </script>
  760. <script src="../lib/main.js"></script>
  761. <script>
  762. function getCookie(name) {
  763. var start = document.cookie.indexOf(name + "=");
  764. var len = start + name.length + 1;
  765. if (!start && name != document.cookie.substring(0, name.length)) {
  766. return null;
  767. }
  768. if (start == -1) return null;
  769. var end = document.cookie.indexOf(";", len);
  770. if (end == -1) end = document.cookie.length;
  771. return decodeURI(document.cookie.substring(len, end));
  772. }
  773. document.addEventListener("DOMContentLoaded", function () {
  774. var initialTimeZone = "local";
  775. var timeZoneSelectorEl = document.getElementById("time-zone-selector");
  776. var loadingEl = document.getElementById("loading");
  777. var calendarEl = document.getElementById("calendar");
  778. var calendar = new FullCalendar.Calendar(calendarEl, {
  779. timeZone: initialTimeZone,
  780. locale: getCookie("language"),
  781. headerToolbar: {
  782. left: "prev,next today",
  783. center: "title",
  784. right: "dayGridMonth,timeGridWeek,timeGridDay,listWeek",
  785. },
  786. //initialDate: "2020-12-12",
  787. navLinks: true, // can click day/week names to navigate views
  788. editable: true,
  789. selectable: true,
  790. dayMaxEvents: true, // allow "more" link when too many events
  791. //resources: g_event_list_arr,
  792. events: g_event_list_arr,
  793. eventClick: function (info) {
  794. info.jsEvent.preventDefault(); // don't let the browser navigate
  795. if (info.event.url) {
  796. window.open(info.event.url);
  797. }
  798. },
  799. loading: function (bool) {
  800. if (bool) {
  801. loadingEl.style.display = "inline"; // show
  802. } else {
  803. loadingEl.style.display = "none"; // hide
  804. }
  805. },
  806. eventTimeFormat: { hour: "numeric", minute: "2-digit" },
  807. dateClick: function (arg) {
  808. console.log("dateClick", calendar.formatIso(arg.date));
  809. },
  810. select: function (arg) {
  811. console.log("select", calendar.formatIso(arg.start), calendar.formatIso(arg.end));
  812. },
  813. });
  814. calendar.render();
  815. // load the list of available timezones, build the <select> options
  816. // it's HIGHLY recommended to use a different library for network requests, not this internal util func
  817. FullCalendar.requestJson(
  818. "GET",
  819. "php/get-time-zones.php",
  820. {},
  821. function (timeZones) {
  822. timeZones.forEach(function (timeZone) {
  823. var optionEl;
  824. if (timeZone !== "UTC") {
  825. // UTC is already in the list
  826. optionEl = document.createElement("option");
  827. optionEl.value = timeZone;
  828. optionEl.innerText = timeZone;
  829. timeZoneSelectorEl.appendChild(optionEl);
  830. }
  831. });
  832. },
  833. function () {
  834. // TODO: handle error
  835. }
  836. );
  837. // when the timezone selector changes, dynamically change the calendar option
  838. timeZoneSelectorEl.addEventListener("change", function () {
  839. calendar.setOption("timeZone", this.value);
  840. });
  841. });
  842. </script>
  843. <style>
  844. body {
  845. margin: 0;
  846. padding: 0;
  847. font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
  848. font-size: 14px;
  849. }
  850. #top {
  851. background: #eee;
  852. border-bottom: 1px solid #ddd;
  853. padding: 0 10px;
  854. line-height: 40px;
  855. font-size: 12px;
  856. }
  857. .left {
  858. float: left;
  859. }
  860. .right {
  861. float: right;
  862. }
  863. .clear {
  864. clear: both;
  865. }
  866. #script-warning,
  867. #loading {
  868. display: none;
  869. }
  870. #script-warning {
  871. font-weight: bold;
  872. color: red;
  873. }
  874. #calendar {
  875. max-width: 1100px;
  876. margin: 40px auto;
  877. padding: 0 10px;
  878. }
  879. .tzo {
  880. color: #000;
  881. }
  882. </style>
  883. </head>
  884. <body>
  885. <div id="top">
  886. <div class="left">
  887. <script>
  888. document.write(localString[g_language].timezone + ":");
  889. </script>
  890. <select id="time-zone-selector">
  891. <option value="local" selected>
  892. <script>
  893. document.write(localString[g_language].local);
  894. </script>
  895. </option>
  896. <option value="UTC">UTC</option>
  897. </select>
  898. </div>
  899. <div class="right">
  900. <span id="loading">
  901. <script>
  902. document.write(localString[g_language].loading + "…");
  903. </script>
  904. </span>
  905. <span id="script-warning"><code>php/get-events.php</code> must be running.</span>
  906. </div>
  907. <div class="clear"></div>
  908. </div>
  909. <div id="calendar"></div>
  910. </body>
  911. </html>