index.html 32 KB

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