;(function(root,factory){ if (typeof define==='function'&&define.amd){ define(factory); }else if(typeof module!='undefined'&&module.exports){ module.exports = factory(); }else{ var o = factory(); for(var i in o){ root[i] = o[i]; } } })(this,function(){ var Solar = (function(){ var _fromDate = function(date){ return _fromYmdHms(date.getFullYear(),date.getMonth()+1,date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds()); }; var _fromJulianDay = function(julianDay){ var d = Math.floor(julianDay + 0.5); var f = julianDay + 0.5 - d; var c; if (d >= 2299161) { c = Math.floor((d - 1867216.25) / 36524.25); d += 1 + c - Math.floor(c / 4); } d += 1524; var year = Math.floor((d - 122.1) / 365.25); d -= Math.floor(365.25 * year); var month = Math.floor(d / 30.601); d -= Math.floor(30.601 * month); var day = d; if (month > 13) { month -= 13; year -= 4715; } else { month -= 1; year -= 4716; } f *= 24; var hour = Math.floor(f); f -= hour; f *= 60; var minute = Math.floor(f); f -= minute; f *= 60; var second = Math.round(f); return _fromYmdHms(year,month,day,hour,minute,second); }; var _fromYmdHms = function(y,m,d,hour,minute,second){ return { _p:{ year:y, month:m, day:d, hour:hour, minute:minute, second:second, calendar:new Date(y+'/'+m+'/'+d+' '+hour+':'+minute+':'+second) }, getYear:function(){ return this._p.year; }, getMonth:function(){ return this._p.month; }, getDay:function(){ return this._p.day; }, getHour:function(){ return this._p.hour; }, getMinute:function(){ return this._p.minute; }, getSecond:function(){ return this._p.second; }, getWeek:function(){ return this._p.calendar.getDay(); }, getWeekInChinese:function(){ return SolarUtil.WEEK[this.getWeek()]; }, /** * 获取当天的阳历周 * @param start 星期几作为一周的开始,1234560分别代表星期一至星期天 */ getSolarWeek:function(start){ return SolarWeek.fromDate(this._p.calendar,start); }, isLeapYear:function(){ return SolarUtil.isLeapYear(this._p.year); }, getFestivals:function(){ var l = []; var f = SolarUtil.FESTIVAL[this._p.month+'-'+this._p.day]; if(f){ l.push(f); } var weeks = Math.ceil(this._p.day/7); var week = this.getWeek(); f = SolarUtil.WEEK_FESTIVAL[this._p.month+'-'+weeks+'-'+week]; if(f){ l.push(f); } return l; }, getOtherFestivals:function(){ var l = []; var fs = SolarUtil.OTHER_FESTIVAL[this._p.month+'-'+this._p.day]; if(fs){ for(var i=0,j=fs.length;i=321&&y<=419) index = 0; else if(y>=420&&y<=520) index = 1; else if(y>=521&&y<=620) index = 2; else if(y>=621&&y<=722) index = 3; else if(y>=723&&y<=822) index = 4; else if(y>=823&&y<=922) index = 5; else if(y>=923&&y<=1022) index = 6; else if(y>=1023&&y<=1121) index = 7; else if(y>=1122&&y<=1221) index = 8; else if(y>=1222||y<=119) index = 9; else if(y<=218) index = 10; return SolarUtil.XINGZUO[index]; }, getXingZuo:function(){ return this.getXingzuo(); }, toYmd:function(){ return [this._p.year,(this._p.month<10?'0':'')+this._p.month,(this._p.day<10?'0':'')+this._p.day].join('-'); }, toYmdHms:function(){ return this.toYmd()+' '+[(this._p.hour<10?'0':'')+this._p.hour,(this._p.minute<10?'0':'')+this._p.minute,(this._p.second<10?'0':'')+this._p.second].join(':'); }, toString:function(){ return this.toYmd(); }, toFullString:function(){ var s = this.toYmdHms(); if(this.isLeapYear()){ s += ' 闰年'; } s += ' 星期'+this.getWeekInChinese(); var festivals = this.getFestivals(); for(var i=0,j=festivals.length;i 0){ date.setDate(date.getDate() + add); var work = true; var holiday = HolidayUtil.getHoliday(date.getFullYear(), date.getMonth() + 1, date.getDate()); if(!holiday){ var week = date.getDay(); if(0 == week || 6 == week){ work = false; } }else{ work = holiday.isWork(); } if(work){ rest--; } } } } return _fromDate(date); }, getLunar:function(){ return Lunar.fromDate(this._p.calendar); }, getJulianDay:function(){ var y = this._p.year; var m = this._p.month; var d = this._p.day + ((this._p.second / 60 + this._p.minute) / 60 + this._p.hour) / 24; var n = 0; var g = false; if (y * 372 + m * 31 + Math.floor(d) >= 588829) { g = true; } if (m <= 2) { m += 12; y--; } if (g) { n = Math.floor(y / 100); n = 2 - n + Math.floor(n / 4); } return Math.floor(365.25 * (y + 4716)) + Math.floor(30.6001 * (m + 1)) + d + n - 1524.5; } }; }; var _fromBaZi=function(yearGanZhi,monthGanZhi,dayGanZhi,timeGanZhi,sect){ sect = (1==sect)?1:2; var l = []; var today = _fromDate(new Date()); var lunar = today.getLunar(); var offsetYear = LunarUtil.getJiaZiIndex(lunar.getYearInGanZhiExact())-LunarUtil.getJiaZiIndex(yearGanZhi); if(offsetYear<0){ offsetYear = offsetYear+60; } var startYear = today.getYear() - offsetYear; var hour = 0; var timeZhi = timeGanZhi.substr(1); for(var i=0,j=LunarUtil.ZHI.length;i=SolarUtil.BASE_YEAR-1){ var year = startYear-1; var counter = 0; var month = 12; var day; var solar; var found = false; while (counter < 15) { if(year>=SolarUtil.BASE_YEAR){ day = 1; if(year==SolarUtil.BASE_YEAR&&month==SolarUtil.BASE_MONTH){ day = SolarUtil.BASE_DAY; } solar = _fromYmdHms(year, month, day, hour, 0, 0); lunar = solar.getLunar(); if(lunar.getYearInGanZhiExact()===yearGanZhi && lunar.getMonthInGanZhiExact()===monthGanZhi){ found = true; break; } } month++; if(month > 12){ month = 1; year++; } counter++; } if(found){ counter = 0; month--; if(month<1){ month = 12; year--; } day = 1; if(year==SolarUtil.BASE_YEAR&&month==SolarUtil.BASE_MONTH){ day = SolarUtil.BASE_DAY; } solar = _fromYmdHms(year, month, day, hour, 0, 0); while (counter < 61) { lunar = solar.getLunar(); var dgz = (2==sect)?lunar.getDayInGanZhiExact2():lunar.getDayInGanZhiExact(); if (lunar.getYearInGanZhiExact()===yearGanZhi && lunar.getMonthInGanZhiExact()===monthGanZhi && dgz===dayGanZhi && lunar.getTimeInGanZhi()===timeGanZhi) { l.push(solar); break; } solar = solar.next(1); counter++; } } startYear -= 60; } return l; }; return { J2000:2451545, fromYmd:function(y,m,d){return _fromYmdHms(y,m,d,0,0,0);}, fromYmdHms:function(y,m,d,hour,minute,second){return _fromYmdHms(y,m,d,hour,minute,second);}, fromDate:function(date){return _fromDate(date);}, fromJulianDay:function(julianDay){return _fromJulianDay(julianDay);}, fromBaZi:function(yearGanZhi,monthGanZhi,dayGanZhi,timeGanZhi){return _fromBaZi(yearGanZhi,monthGanZhi,dayGanZhi,timeGanZhi);} }; })(); var Lunar = (function(){ var SECOND_PER_RAD = 180 * 3600 / Math.PI; var JIE_QI = ['冬至','小寒','大寒','立春','雨水','惊蛰','春分','清明','谷雨','立夏','小满','芒种','夏至','小暑','大暑','立秋','处暑','白露','秋分','寒露','霜降','立冬','小雪','大雪']; var NUT_B = [2.1824, -33.75705, 36e-6, -1720, 920, 3.5069, 1256.66393, 11e-6, -132, 57, 1.3375, 16799.4182, -51e-6, -23, 10, 4.3649, -67.5141, 72e-6, 21, -9, 0.04, -628.302, 0, -14, 0, 2.36, 8328.691, 0, 7, 0, 3.46, 1884.966, 0, -5, 2, 5.44, 16833.175, 0, -4, 2, 3.69, 25128.110, 0, -3, 0, 3.55, 628.362, 0, 2, 0]; var DT_AT = [-4000, 108371.7, -13036.80, 392.000, 0.0000, -500, 17201.0, -627.82, 16.170, -0.3413, -150, 12200.6, -346.41, 5.403, -0.1593, 150, 9113.8, -328.13, -1.647, 0.0377, 500, 5707.5, -391.41, 0.915, 0.3145, 900, 2203.4, -283.45, 13.034, -0.1778, 1300, 490.1, -57.35, 2.085, -0.0072, 1600, 120.0, -9.81, -1.532, 0.1403, 1700, 10.2, -0.91, 0.510, -0.0370, 1800, 13.4, -0.72, 0.202, -0.0193, 1830, 7.8, -1.81, 0.416, -0.0247, 1860, 8.3, -0.13, -0.406, 0.0292, 1880, -5.4, 0.32, -0.183, 0.0173, 1900, -2.3, 2.06, 0.169, -0.0135, 1920, 21.2, 1.69, -0.304, 0.0167, 1940, 24.2, 1.22, -0.064, 0.0031, 1960, 33.2, 0.51, 0.231, -0.0109, 1980, 51.0, 1.29, -0.026, 0.0032, 2000, 63.87, 0.1, 0, 0, 2005, 64.7, 0.4, 0, 0, 2015, 69]; var XL0 = [10000000000, 20, 578, 920, 1100, 1124, 1136, 1148, 1217, 1226, 1229, 1229, 1229, 1229, 1937, 2363, 2618, 2633, 2660, 2666, 17534704567, 0.00000000000, 0.00000000000, 334165646, 4.669256804, 6283.075849991, 3489428, 4.6261024, 12566.1517000, 349706, 2.744118, 5753.384885, 341757, 2.828866, 3.523118, 313590, 3.627670, 77713.771468, 267622, 4.418084, 7860.419392, 234269, 6.135162, 3930.209696, 132429, 0.742464, 11506.769770, 127317, 2.037097, 529.690965, 119917, 1.109629, 1577.343542, 99025, 5.23268, 5884.92685, 90186, 2.04505, 26.29832, 85722, 3.50849, 398.14900, 77979, 1.17883, 5223.69392, 75314, 2.53339, 5507.55324, 50526, 4.58293, 18849.22755, 49238, 4.20507, 775.52261, 35666, 2.91954, 0.06731, 31709, 5.84902, 11790.62909, 28413, 1.89869, 796.29801, 27104, 0.31489, 10977.07880, 24281, 0.34481, 5486.77784, 20616, 4.80647, 2544.31442, 20539, 1.86948, 5573.14280, 20226, 2.45768, 6069.77675, 15552, 0.83306, 213.29910, 13221, 3.41118, 2942.46342, 12618, 1.08303, 20.77540, 11513, 0.64545, 0.98032, 10285, 0.63600, 4694.00295, 10190, 0.97569, 15720.83878, 10172, 4.26680, 7.11355, 9921, 6.2099, 2146.1654, 9761, 0.6810, 155.4204, 8580, 5.9832, 161000.6857, 8513, 1.2987, 6275.9623, 8471, 3.6708, 71430.6956, 7964, 1.8079, 17260.1547, 7876, 3.0370, 12036.4607, 7465, 1.7551, 5088.6288, 7387, 3.5032, 3154.6871, 7355, 4.6793, 801.8209, 6963, 0.8330, 9437.7629, 6245, 3.9776, 8827.3903, 6115, 1.8184, 7084.8968, 5696, 2.7843, 6286.5990, 5612, 4.3869, 14143.4952, 5558, 3.4701, 6279.5527, 5199, 0.1891, 12139.5535, 5161, 1.3328, 1748.0164, 5115, 0.2831, 5856.4777, 4900, 0.4874, 1194.4470, 4104, 5.3682, 8429.2413, 4094, 2.3985, 19651.0485, 3920, 6.1683, 10447.3878, 3677, 6.0413, 10213.2855, 3660, 2.5696, 1059.3819, 3595, 1.7088, 2352.8662, 3557, 1.7760, 6812.7668, 3329, 0.5931, 17789.8456, 3041, 0.4429, 83996.8473, 3005, 2.7398, 1349.8674, 2535, 3.1647, 4690.4798, 2474, 0.2148, 3.5904, 2366, 0.4847, 8031.0923, 2357, 2.0653, 3340.6124, 2282, 5.2220, 4705.7323, 2189, 5.5559, 553.5694, 2142, 1.4256, 16730.4637, 2109, 4.1483, 951.7184, 2030, 0.3713, 283.8593, 1992, 5.2221, 12168.0027, 1986, 5.7747, 6309.3742, 1912, 3.8222, 23581.2582, 1889, 5.3863, 149854.4001, 1790, 2.2149, 13367.9726, 1748, 4.5605, 135.0651, 1622, 5.9884, 11769.8537, 1508, 4.1957, 6256.7775, 1442, 4.1932, 242.7286, 1435, 3.7236, 38.0277, 1397, 4.4014, 6681.2249, 1362, 1.8893, 7632.9433, 1250, 1.1305, 5.5229, 1205, 2.6223, 955.5997, 1200, 1.0035, 632.7837, 1129, 0.1774, 4164.3120, 1083, 0.3273, 103.0928, 1052, 0.9387, 11926.2544, 1050, 5.3591, 1592.5960, 1033, 6.1998, 6438.4962, 1001, 6.0291, 5746.2713, 980, 0.999, 11371.705, 980, 5.244, 27511.468, 938, 2.624, 5760.498, 923, 0.483, 522.577, 922, 4.571, 4292.331, 905, 5.337, 6386.169, 862, 4.165, 7058.598, 841, 3.299, 7234.794, 836, 4.539, 25132.303, 813, 6.112, 4732.031, 812, 6.271, 426.598, 801, 5.821, 28.449, 787, 0.996, 5643.179, 776, 2.957, 23013.540, 769, 3.121, 7238.676, 758, 3.974, 11499.656, 735, 4.386, 316.392, 731, 0.607, 11513.883, 719, 3.998, 74.782, 706, 0.323, 263.084, 676, 5.911, 90955.552, 663, 3.665, 17298.182, 653, 5.791, 18073.705, 630, 4.717, 6836.645, 615, 1.458, 233141.314, 612, 1.075, 19804.827, 596, 3.321, 6283.009, 596, 2.876, 6283.143, 555, 2.452, 12352.853, 541, 5.392, 419.485, 531, 0.382, 31441.678, 519, 4.065, 6208.294, 513, 2.361, 10973.556, 494, 5.737, 9917.697, 450, 3.272, 11015.106, 449, 3.653, 206.186, 447, 2.064, 7079.374, 435, 4.423, 5216.580, 421, 1.906, 245.832, 413, 0.921, 3738.761, 402, 0.840, 20.355, 387, 1.826, 11856.219, 379, 2.344, 3.881, 374, 2.954, 3128.389, 370, 5.031, 536.805, 365, 1.018, 16200.773, 365, 1.083, 88860.057, 352, 5.978, 3894.182, 352, 2.056, 244287.600, 351, 3.713, 6290.189, 340, 1.106, 14712.317, 339, 0.978, 8635.942, 339, 3.202, 5120.601, 333, 0.837, 6496.375, 325, 3.479, 6133.513, 316, 5.089, 21228.392, 316, 1.328, 10873.986, 309, 3.646, 10.637, 303, 1.802, 35371.887, 296, 3.397, 9225.539, 288, 6.026, 154717.610, 281, 2.585, 14314.168, 262, 3.856, 266.607, 262, 2.579, 22483.849, 257, 1.561, 23543.231, 255, 3.949, 1990.745, 251, 3.744, 10575.407, 240, 1.161, 10984.192, 238, 0.106, 7.046, 236, 4.272, 6040.347, 234, 3.577, 10969.965, 211, 3.714, 65147.620, 210, 0.754, 13521.751, 207, 4.228, 5650.292, 202, 0.814, 170.673, 201, 4.629, 6037.244, 200, 0.381, 6172.870, 199, 3.933, 6206.810, 199, 5.197, 6262.300, 197, 1.046, 18209.330, 195, 1.070, 5230.807, 195, 4.869, 36.028, 194, 4.313, 6244.943, 192, 1.229, 709.933, 192, 5.595, 6282.096, 192, 0.602, 6284.056, 189, 3.744, 23.878, 188, 1.904, 15.252, 188, 0.867, 22003.915, 182, 3.681, 15110.466, 181, 0.491, 1.484, 179, 3.222, 39302.097, 179, 1.259, 12559.038, 62833196674749, 0.000000000000, 0.000000000000, 20605886, 2.67823456, 6283.07584999, 430343, 2.635127, 12566.151700, 42526, 1.59047, 3.52312, 11926, 5.79557, 26.29832, 10898, 2.96618, 1577.34354, 9348, 2.5921, 18849.2275, 7212, 1.1385, 529.6910, 6777, 1.8747, 398.1490, 6733, 4.4092, 5507.5532, 5903, 2.8880, 5223.6939, 5598, 2.1747, 155.4204, 4541, 0.3980, 796.2980, 3637, 0.4662, 775.5226, 2896, 2.6471, 7.1135, 2084, 5.3414, 0.9803, 1910, 1.8463, 5486.7778, 1851, 4.9686, 213.2991, 1729, 2.9912, 6275.9623, 1623, 0.0322, 2544.3144, 1583, 1.4305, 2146.1654, 1462, 1.2053, 10977.0788, 1246, 2.8343, 1748.0164, 1188, 3.2580, 5088.6288, 1181, 5.2738, 1194.4470, 1151, 2.0750, 4694.0030, 1064, 0.7661, 553.5694, 997, 1.303, 6286.599, 972, 4.239, 1349.867, 945, 2.700, 242.729, 858, 5.645, 951.718, 758, 5.301, 2352.866, 639, 2.650, 9437.763, 610, 4.666, 4690.480, 583, 1.766, 1059.382, 531, 0.909, 3154.687, 522, 5.661, 71430.696, 520, 1.854, 801.821, 504, 1.425, 6438.496, 433, 0.241, 6812.767, 426, 0.774, 10447.388, 413, 5.240, 7084.897, 374, 2.001, 8031.092, 356, 2.429, 14143.495, 350, 4.800, 6279.553, 337, 0.888, 12036.461, 337, 3.862, 1592.596, 325, 3.400, 7632.943, 322, 0.616, 8429.241, 318, 3.188, 4705.732, 297, 6.070, 4292.331, 295, 1.431, 5746.271, 290, 2.325, 20.355, 275, 0.935, 5760.498, 270, 4.804, 7234.794, 253, 6.223, 6836.645, 228, 5.003, 17789.846, 225, 5.672, 11499.656, 215, 5.202, 11513.883, 208, 3.955, 10213.286, 208, 2.268, 522.577, 206, 2.224, 5856.478, 206, 2.550, 25132.303, 203, 0.910, 6256.778, 189, 0.532, 3340.612, 188, 4.735, 83996.847, 179, 1.474, 4164.312, 178, 3.025, 5.523, 177, 3.026, 5753.385, 159, 4.637, 3.286, 157, 6.124, 5216.580, 155, 3.077, 6681.225, 154, 4.200, 13367.973, 143, 1.191, 3894.182, 138, 3.093, 135.065, 136, 4.245, 426.598, 134, 5.765, 6040.347, 128, 3.085, 5643.179, 127, 2.092, 6290.189, 125, 3.077, 11926.254, 125, 3.445, 536.805, 114, 3.244, 12168.003, 112, 2.318, 16730.464, 111, 3.901, 11506.770, 111, 5.320, 23.878, 105, 3.750, 7860.419, 103, 2.447, 1990.745, 96, 0.82, 3.88, 96, 4.08, 6127.66, 91, 5.42, 206.19, 91, 0.42, 7079.37, 88, 5.17, 11790.63, 81, 0.34, 9917.70, 80, 3.89, 10973.56, 78, 2.40, 1589.07, 78, 2.58, 11371.70, 77, 3.98, 955.60, 77, 3.36, 36.03, 76, 1.30, 103.09, 75, 5.18, 10969.97, 75, 4.96, 6496.37, 73, 5.21, 38.03, 72, 2.65, 6309.37, 70, 5.61, 3738.76, 69, 2.60, 3496.03, 69, 0.39, 15.25, 69, 2.78, 20.78, 65, 1.13, 7058.60, 64, 4.28, 28.45, 61, 5.63, 10984.19, 60, 0.73, 419.48, 60, 5.28, 10575.41, 58, 5.55, 17298.18, 58, 3.19, 4732.03, 5291887, 0.0000000, 0.0000000, 871984, 1.072097, 6283.075850, 30913, 0.86729, 12566.15170, 2734, 0.0530, 3.5231, 1633, 5.1883, 26.2983, 1575, 3.6846, 155.4204, 954, 0.757, 18849.228, 894, 2.057, 77713.771, 695, 0.827, 775.523, 506, 4.663, 1577.344, 406, 1.031, 7.114, 381, 3.441, 5573.143, 346, 5.141, 796.298, 317, 6.053, 5507.553, 302, 1.192, 242.729, 289, 6.117, 529.691, 271, 0.306, 398.149, 254, 2.280, 553.569, 237, 4.381, 5223.694, 208, 3.754, 0.980, 168, 0.902, 951.718, 153, 5.759, 1349.867, 145, 4.364, 1748.016, 134, 3.721, 1194.447, 125, 2.948, 6438.496, 122, 2.973, 2146.165, 110, 1.271, 161000.686, 104, 0.604, 3154.687, 100, 5.986, 6286.599, 92, 4.80, 5088.63, 89, 5.23, 7084.90, 83, 3.31, 213.30, 76, 3.42, 5486.78, 71, 6.19, 4690.48, 68, 3.43, 4694.00, 65, 1.60, 2544.31, 64, 1.98, 801.82, 61, 2.48, 10977.08, 50, 1.44, 6836.65, 49, 2.34, 1592.60, 46, 1.31, 4292.33, 46, 3.81, 149854.40, 43, 0.04, 7234.79, 40, 4.94, 7632.94, 39, 1.57, 71430.70, 38, 3.17, 6309.37, 35, 0.99, 6040.35, 35, 0.67, 1059.38, 31, 3.18, 2352.87, 31, 3.55, 8031.09, 30, 1.92, 10447.39, 30, 2.52, 6127.66, 28, 4.42, 9437.76, 28, 2.71, 3894.18, 27, 0.67, 25132.30, 26, 5.27, 6812.77, 25, 0.55, 6279.55, 23, 1.38, 4705.73, 22, 0.64, 6256.78, 20, 6.07, 640.88, 28923, 5.84384, 6283.07585, 3496, 0.0000, 0.0000, 1682, 5.4877, 12566.1517, 296, 5.196, 155.420, 129, 4.722, 3.523, 71, 5.30, 18849.23, 64, 5.97, 242.73, 40, 3.79, 553.57, 11408, 3.14159, 0.00000, 772, 4.134, 6283.076, 77, 3.84, 12566.15, 42, 0.42, 155.42, 88, 3.14, 0.00, 17, 2.77, 6283.08, 5, 2.01, 155.42, 3, 2.21, 12566.15, 27962, 3.19870, 84334.66158, 10164, 5.42249, 5507.55324, 8045, 3.8801, 5223.6939, 4381, 3.7044, 2352.8662, 3193, 4.0003, 1577.3435, 2272, 3.9847, 1047.7473, 1814, 4.9837, 6283.0758, 1639, 3.5646, 5856.4777, 1444, 3.7028, 9437.7629, 1430, 3.4112, 10213.2855, 1125, 4.8282, 14143.4952, 1090, 2.0857, 6812.7668, 1037, 4.0566, 71092.8814, 971, 3.473, 4694.003, 915, 1.142, 6620.890, 878, 4.440, 5753.385, 837, 4.993, 7084.897, 770, 5.554, 167621.576, 719, 3.602, 529.691, 692, 4.326, 6275.962, 558, 4.410, 7860.419, 529, 2.484, 4705.732, 521, 6.250, 18073.705, 903, 3.897, 5507.553, 618, 1.730, 5223.694, 380, 5.244, 2352.866, 166, 1.627, 84334.662, 10001398880, 0.00000000000, 0.00000000000, 167069963, 3.098463508, 6283.075849991, 1395602, 3.0552461, 12566.1517000, 308372, 5.198467, 77713.771468, 162846, 1.173877, 5753.384885, 157557, 2.846852, 7860.419392, 92480, 5.45292, 11506.76977, 54244, 4.56409, 3930.20970, 47211, 3.66100, 5884.92685, 34598, 0.96369, 5507.55324, 32878, 5.89984, 5223.69392, 30678, 0.29867, 5573.14280, 24319, 4.27350, 11790.62909, 21183, 5.84715, 1577.34354, 18575, 5.02194, 10977.07880, 17484, 3.01194, 18849.22755, 10984, 5.05511, 5486.77784, 9832, 0.8868, 6069.7768, 8650, 5.6896, 15720.8388, 8583, 1.2708, 161000.6857, 6490, 0.2725, 17260.1547, 6292, 0.9218, 529.6910, 5706, 2.0137, 83996.8473, 5574, 5.2416, 71430.6956, 4938, 3.2450, 2544.3144, 4696, 2.5781, 775.5226, 4466, 5.5372, 9437.7629, 4252, 6.0111, 6275.9623, 3897, 5.3607, 4694.0030, 3825, 2.3926, 8827.3903, 3749, 0.8295, 19651.0485, 3696, 4.9011, 12139.5535, 3566, 1.6747, 12036.4607, 3454, 1.8427, 2942.4634, 3319, 0.2437, 7084.8968, 3192, 0.1837, 5088.6288, 3185, 1.7778, 398.1490, 2846, 1.2134, 6286.5990, 2779, 1.8993, 6279.5527, 2628, 4.5890, 10447.3878, 2460, 3.7866, 8429.2413, 2393, 4.9960, 5856.4777, 2359, 0.2687, 796.2980, 2329, 2.8078, 14143.4952, 2210, 1.9500, 3154.6871, 2035, 4.6527, 2146.1654, 1951, 5.3823, 2352.8662, 1883, 0.6731, 149854.4001, 1833, 2.2535, 23581.2582, 1796, 0.1987, 6812.7668, 1731, 6.1520, 16730.4637, 1717, 4.4332, 10213.2855, 1619, 5.2316, 17789.8456, 1381, 5.1896, 8031.0923, 1364, 3.6852, 4705.7323, 1314, 0.6529, 13367.9726, 1041, 4.3329, 11769.8537, 1017, 1.5939, 4690.4798, 998, 4.201, 6309.374, 966, 3.676, 27511.468, 874, 6.064, 1748.016, 779, 3.674, 12168.003, 771, 0.312, 7632.943, 756, 2.626, 6256.778, 746, 5.648, 11926.254, 693, 2.924, 6681.225, 680, 1.423, 23013.540, 674, 0.563, 3340.612, 663, 5.661, 11371.705, 659, 3.136, 801.821, 648, 2.650, 19804.827, 615, 3.029, 233141.314, 612, 5.134, 1194.447, 563, 4.341, 90955.552, 552, 2.091, 17298.182, 534, 5.100, 31441.678, 531, 2.407, 11499.656, 523, 4.624, 6438.496, 513, 5.324, 11513.883, 477, 0.256, 11856.219, 461, 1.722, 7234.794, 458, 3.766, 6386.169, 458, 4.466, 5746.271, 423, 1.055, 5760.498, 422, 1.557, 7238.676, 415, 2.599, 7058.598, 401, 3.030, 1059.382, 397, 1.201, 1349.867, 379, 4.907, 4164.312, 360, 5.707, 5643.179, 352, 3.626, 244287.600, 348, 0.761, 10973.556, 342, 3.001, 4292.331, 336, 4.546, 4732.031, 334, 3.138, 6836.645, 324, 4.164, 9917.697, 316, 1.691, 11015.106, 307, 0.238, 35371.887, 298, 1.306, 6283.143, 298, 1.750, 6283.009, 293, 5.738, 16200.773, 286, 5.928, 14712.317, 281, 3.515, 21228.392, 280, 5.663, 8635.942, 277, 0.513, 26.298, 268, 4.207, 18073.705, 266, 0.900, 12352.853, 260, 2.962, 25132.303, 255, 2.477, 6208.294, 242, 2.800, 709.933, 231, 1.054, 22483.849, 229, 1.070, 14314.168, 216, 1.314, 154717.610, 215, 6.038, 10873.986, 200, 0.561, 7079.374, 198, 2.614, 951.718, 197, 4.369, 167283.762, 186, 2.861, 5216.580, 183, 1.660, 39302.097, 183, 5.912, 3738.761, 175, 2.145, 6290.189, 173, 2.168, 10575.407, 171, 3.702, 1592.596, 171, 1.343, 3128.389, 164, 5.550, 6496.375, 164, 5.856, 10984.192, 161, 1.998, 10969.965, 161, 1.909, 6133.513, 157, 4.955, 25158.602, 154, 6.216, 23543.231, 153, 5.357, 13521.751, 150, 5.770, 18209.330, 150, 5.439, 155.420, 139, 1.778, 9225.539, 139, 1.626, 5120.601, 128, 2.460, 13916.019, 123, 0.717, 143571.324, 122, 2.654, 88860.057, 121, 4.414, 3894.182, 121, 1.192, 3.523, 120, 4.030, 553.569, 119, 1.513, 17654.781, 117, 3.117, 14945.316, 113, 2.698, 6040.347, 110, 3.085, 43232.307, 109, 0.998, 955.600, 108, 2.939, 17256.632, 107, 5.285, 65147.620, 103, 0.139, 11712.955, 103, 5.850, 213.299, 102, 3.046, 6037.244, 101, 2.842, 8662.240, 100, 3.626, 6262.300, 98, 2.36, 6206.81, 98, 5.11, 6172.87, 98, 2.00, 15110.47, 97, 2.67, 5650.29, 97, 2.75, 6244.94, 96, 4.02, 6282.10, 96, 5.31, 6284.06, 92, 0.10, 29088.81, 85, 3.26, 20426.57, 84, 2.60, 28766.92, 81, 3.58, 10177.26, 80, 5.81, 5230.81, 78, 2.53, 16496.36, 77, 4.06, 6127.66, 73, 0.04, 5481.25, 72, 5.96, 12559.04, 72, 5.92, 4136.91, 71, 5.49, 22003.91, 70, 3.41, 7.11, 69, 0.62, 11403.68, 69, 3.90, 1589.07, 69, 1.96, 12416.59, 69, 4.51, 426.60, 67, 1.61, 11087.29, 66, 4.50, 47162.52, 66, 5.08, 283.86, 66, 4.32, 16858.48, 65, 1.04, 6062.66, 64, 1.59, 18319.54, 63, 5.70, 45892.73, 63, 4.60, 66567.49, 63, 3.82, 13517.87, 62, 2.62, 11190.38, 61, 1.54, 33019.02, 60, 5.58, 10344.30, 60, 5.38, 316428.23, 60, 5.78, 632.78, 59, 6.12, 9623.69, 57, 0.16, 17267.27, 57, 3.86, 6076.89, 57, 1.98, 7668.64, 56, 4.78, 20199.09, 55, 4.56, 18875.53, 55, 3.51, 17253.04, 54, 3.07, 226858.24, 54, 4.83, 18422.63, 53, 5.02, 12132.44, 52, 3.63, 5333.90, 52, 0.97, 155427.54, 51, 3.36, 20597.24, 50, 0.99, 11609.86, 50, 2.21, 1990.75, 48, 1.62, 12146.67, 48, 1.17, 12569.67, 47, 4.62, 5436.99, 47, 1.81, 12562.63, 47, 0.59, 21954.16, 47, 0.76, 7342.46, 46, 0.27, 4590.91, 46, 3.77, 156137.48, 45, 5.66, 10454.50, 44, 5.84, 3496.03, 43, 0.24, 17996.03, 41, 5.93, 51092.73, 41, 4.21, 12592.45, 40, 5.14, 1551.05, 40, 5.28, 15671.08, 39, 3.69, 18052.93, 39, 4.94, 24356.78, 38, 2.72, 11933.37, 38, 5.23, 7477.52, 38, 4.99, 9779.11, 37, 3.70, 9388.01, 37, 4.44, 4535.06, 36, 2.16, 28237.23, 36, 2.54, 242.73, 36, 0.22, 5429.88, 35, 6.15, 19800.95, 35, 2.92, 36949.23, 34, 5.63, 2379.16, 34, 5.73, 16460.33, 34, 5.11, 5849.36, 33, 6.19, 6268.85, 10301861, 1.10748970, 6283.07584999, 172124, 1.064423, 12566.151700, 70222, 3.14159, 0.00000, 3235, 1.0217, 18849.2275, 3080, 2.8435, 5507.5532, 2497, 1.3191, 5223.6939, 1849, 1.4243, 1577.3435, 1008, 5.9138, 10977.0788, 865, 1.420, 6275.962, 863, 0.271, 5486.778, 507, 1.686, 5088.629, 499, 6.014, 6286.599, 467, 5.987, 529.691, 440, 0.518, 4694.003, 410, 1.084, 9437.763, 387, 4.750, 2544.314, 375, 5.071, 796.298, 352, 0.023, 83996.847, 344, 0.949, 71430.696, 341, 5.412, 775.523, 322, 6.156, 2146.165, 286, 5.484, 10447.388, 284, 3.420, 2352.866, 255, 6.132, 6438.496, 252, 0.243, 398.149, 243, 3.092, 4690.480, 225, 3.689, 7084.897, 220, 4.952, 6812.767, 219, 0.420, 8031.092, 209, 1.282, 1748.016, 193, 5.314, 8429.241, 185, 1.820, 7632.943, 175, 3.229, 6279.553, 173, 1.537, 4705.732, 158, 4.097, 11499.656, 158, 5.539, 3154.687, 150, 3.633, 11513.883, 148, 3.222, 7234.794, 147, 3.653, 1194.447, 144, 0.817, 14143.495, 135, 6.151, 5746.271, 134, 4.644, 6836.645, 128, 2.693, 1349.867, 123, 5.650, 5760.498, 118, 2.577, 13367.973, 113, 3.357, 17789.846, 110, 4.497, 4292.331, 108, 5.828, 12036.461, 102, 5.621, 6256.778, 99, 1.14, 1059.38, 98, 0.66, 5856.48, 93, 2.32, 10213.29, 92, 0.77, 16730.46, 88, 1.50, 11926.25, 86, 1.42, 5753.38, 85, 0.66, 155.42, 81, 1.64, 6681.22, 80, 4.11, 951.72, 66, 4.55, 5216.58, 65, 0.98, 25132.30, 64, 4.19, 6040.35, 64, 0.52, 6290.19, 63, 1.51, 5643.18, 59, 6.18, 4164.31, 57, 2.30, 10973.56, 55, 2.32, 11506.77, 55, 2.20, 1592.60, 55, 5.27, 3340.61, 54, 5.54, 553.57, 53, 5.04, 9917.70, 53, 0.92, 11371.70, 52, 3.98, 17298.18, 52, 3.60, 10969.97, 49, 5.91, 3894.18, 49, 2.51, 6127.66, 48, 1.67, 12168.00, 46, 0.31, 801.82, 42, 3.70, 10575.41, 42, 4.05, 10984.19, 40, 2.17, 7860.42, 40, 4.17, 26.30, 38, 5.82, 7058.60, 37, 3.39, 6496.37, 36, 1.08, 6309.37, 36, 5.34, 7079.37, 34, 3.62, 11790.63, 32, 0.32, 16200.77, 31, 4.24, 3738.76, 29, 4.55, 11856.22, 29, 1.26, 8635.94, 27, 3.45, 5884.93, 26, 5.08, 10177.26, 26, 5.38, 21228.39, 24, 2.26, 11712.96, 24, 1.05, 242.73, 24, 5.59, 6069.78, 23, 3.63, 6284.06, 23, 1.64, 4732.03, 22, 3.46, 213.30, 21, 1.05, 3496.03, 21, 3.92, 13916.02, 21, 4.01, 5230.81, 20, 5.16, 12352.85, 20, 0.69, 1990.75, 19, 2.73, 6062.66, 19, 5.01, 11015.11, 18, 6.04, 6283.01, 18, 2.85, 7238.68, 18, 5.60, 6283.14, 18, 5.16, 17253.04, 18, 2.54, 14314.17, 17, 1.58, 7.11, 17, 0.98, 3930.21, 17, 4.75, 17267.27, 16, 2.19, 6076.89, 16, 2.19, 18073.70, 16, 6.12, 3.52, 16, 4.61, 9623.69, 16, 3.40, 16496.36, 15, 0.19, 9779.11, 15, 5.30, 13517.87, 15, 4.26, 3128.39, 15, 0.81, 709.93, 14, 0.50, 25158.60, 14, 4.38, 4136.91, 13, 0.98, 65147.62, 13, 3.31, 154717.61, 13, 2.11, 1589.07, 13, 1.92, 22483.85, 12, 6.03, 9225.54, 12, 1.53, 12559.04, 12, 5.82, 6282.10, 12, 5.61, 5642.20, 12, 2.38, 167283.76, 12, 0.39, 12132.44, 12, 3.98, 4686.89, 12, 5.81, 12569.67, 12, 0.56, 5849.36, 11, 0.45, 6172.87, 11, 5.80, 16858.48, 11, 6.22, 12146.67, 11, 2.27, 5429.88, 435939, 5.784551, 6283.075850, 12363, 5.57935, 12566.15170, 1234, 3.1416, 0.0000, 879, 3.628, 77713.771, 569, 1.870, 5573.143, 330, 5.470, 18849.228, 147, 4.480, 5507.553, 110, 2.842, 161000.686, 101, 2.815, 5223.694, 85, 3.11, 1577.34, 65, 5.47, 775.52, 61, 1.38, 6438.50, 50, 4.42, 6286.60, 47, 3.66, 7084.90, 46, 5.39, 149854.40, 42, 0.90, 10977.08, 40, 3.20, 5088.63, 35, 1.81, 5486.78, 32, 5.35, 3154.69, 30, 3.52, 796.30, 29, 4.62, 4690.48, 28, 1.84, 4694.00, 27, 3.14, 71430.70, 27, 6.17, 6836.65, 26, 1.42, 2146.17, 25, 2.81, 1748.02, 24, 2.18, 155.42, 23, 4.76, 7234.79, 21, 3.38, 7632.94, 21, 0.22, 4705.73, 20, 4.22, 1349.87, 20, 2.01, 1194.45, 20, 4.58, 529.69, 19, 1.59, 6309.37, 18, 5.70, 6040.35, 18, 6.03, 4292.33, 17, 2.90, 9437.76, 17, 2.00, 8031.09, 17, 5.78, 83996.85, 16, 0.05, 2544.31, 15, 0.95, 6127.66, 14, 0.36, 10447.39, 14, 1.48, 2352.87, 13, 0.77, 553.57, 13, 5.48, 951.72, 13, 5.27, 6279.55, 13, 3.76, 6812.77, 11, 5.41, 6256.78, 10, 0.68, 1592.60, 10, 4.95, 398.15, 10, 1.15, 3894.18, 10, 5.20, 244287.60, 10, 1.94, 11856.22, 9, 5.39, 25132.30, 8, 6.18, 1059.38, 8, 0.69, 8429.24, 8, 5.85, 242.73, 7, 5.26, 14143.50, 7, 0.52, 801.82, 6, 2.24, 8635.94, 6, 4.00, 13367.97, 6, 2.77, 90955.55, 6, 5.17, 7058.60, 5, 1.46, 233141.31, 5, 4.13, 7860.42, 5, 3.91, 26.30, 5, 3.89, 12036.46, 5, 5.58, 6290.19, 5, 5.54, 1990.75, 5, 0.83, 11506.77, 5, 6.22, 6681.22, 4, 5.26, 10575.41, 4, 1.91, 7477.52, 4, 0.43, 10213.29, 4, 1.09, 709.93, 4, 5.09, 11015.11, 4, 4.22, 88860.06, 4, 3.57, 7079.37, 4, 1.98, 6284.06, 4, 3.93, 10973.56, 4, 6.18, 9917.70, 4, 0.36, 10177.26, 4, 2.75, 3738.76, 4, 3.33, 5643.18, 4, 5.36, 25158.60, 14459, 4.27319, 6283.07585, 673, 3.917, 12566.152, 77, 0.00, 0.00, 25, 3.73, 18849.23, 4, 2.80, 6286.60, 386, 2.564, 6283.076, 31, 2.27, 12566.15, 5, 3.44, 5573.14, 2, 2.05, 18849.23, 1, 2.06, 77713.77, 1, 4.41, 161000.69, 1, 3.82, 149854.40, 1, 4.08, 6127.66, 1, 5.26, 6438.50, 9, 1.22, 6283.08, 1, 0.66, 12566.15]; var QI_KB = [1640650.479938, 15.21842500, 1642476.703182, 15.21874996, 1683430.515601, 15.218750011, 1752157.640664, 15.218749978, 1807675.003759, 15.218620279, 1883627.765182, 15.218612292, 1907369.128100, 15.218449176, 1936603.140413, 15.218425000, 1939145.524180, 15.218466998, 1947180.798300, 15.218524844, 1964362.041824, 15.218533526, 1987372.340971, 15.218513908, 1999653.819126, 15.218530782, 2007445.469786, 15.218535181, 2021324.917146, 15.218526248, 2047257.232342, 15.218519654, 2070282.898213, 15.218425000, 2073204.872850, 15.218515221, 2080144.500926, 15.218530782, 2086703.688963, 15.218523776, 2110033.182763, 15.218425000, 2111190.300888, 15.218425000, 2113731.271005, 15.218515671, 2120670.840263, 15.218425000, 2123973.309063, 15.218425000, 2125068.997336, 15.218477932, 2136026.312633, 15.218472436, 2156099.495538, 15.218425000, 2159021.324663, 15.218425000, 2162308.575254, 15.218461742, 2178485.706538, 15.218425000, 2178759.662849, 15.218445786, 2185334.020800, 15.218425000, 2187525.481425, 15.218425000, 2188621.191481, 15.218437494, 2322147.76]; var QB = '0000000000000200000001000000000000222000000000000000000000000000000000000000000000000000000000000000000000000200000001010000000000202002000000000000000000000000000000020000000000000020000000000000000000002000000000010000020000002002000000000000000010000000000000100100000000000020000010000000000020000000020000010000000002000002002000000000000000000000000100100101000000000020000000001000000020000000020000010000000002000002000000000000000000020000000000100101000200000020200000001000000020000000000000000000000002000000000000000000000000220000000000000010000200000000200000001000000000000000000000000000000002000200000000000000002000222000000000000010000000000000200000001000100000000000000000000000000000000200000001000000000000222000000000000010000000000000000000000000100000000000200000000000000000000200200001000000000000222002000000000000000000000000000000000000000000000020000000000000000000000200000000010000000000202002000000000000000000000000000000100000000000000020000010000000000000000000020000010000000000002002002000000000000000000000000000100100000000000020000000000000000020000000020000010000000002000002000000000000000001000000000000100101000000000020200000001000000020000000000000000000000002000000000000000000000000020000000000000101000200000020200000001000000020000000000000000000000002000200000000000000000000020000000000000001000200000000200000001000000000000000000000000000000002000200000000000000000000222000000000000010000000000000000000000000000000000000000000000000000000000200000001000000002000222000000000000000000000000000000000000000100000000000000000000000010000000200000000010000000000222002000000000000000000000000000000100000000000000020000010000000000000000200020000010000000000202002002000000000000000000000000100100000000000000020000000000000000000000000020000010000000000002002000000000000000000000000000000100100000000000020200000000000000000000000020000000000000002000002000000000000000000000000000000000100000000000020200000001000000020000000000000000000000002000000000000000000000000020000000000000111000000000000200000001000000020000000000000000000000002000200000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000010000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000020000002000000000000000000000000000000000000000000000000000000000010000000200000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000001000000002000000000000000000000000000000000100000000000000000000001000010000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000010000000000000000100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000001000010000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000000000010000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'; var _fromDate = function(date){ var solar = Solar.fromDate(date); var y = solar.getYear(); var m = solar.getMonth(); var d = solar.getDay(); var hour = date.getHours(); var minute = date.getMinutes(); var second = date.getSeconds(); var startY,startM,startD; var lunarY,lunarM,lunarD; if(y<2000){ startY = SolarUtil.BASE_YEAR; startM = SolarUtil.BASE_MONTH; startD = SolarUtil.BASE_DAY; lunarY = LunarUtil.BASE_YEAR; lunarM = LunarUtil.BASE_MONTH; lunarD = LunarUtil.BASE_DAY; }else{ startY = SolarUtil.BASE_YEAR+99; startM = 1; startD = 1; lunarY = LunarUtil.BASE_YEAR+99; lunarM = 11; lunarD = 25; } var diff = 0,i; for(i=startY;ilastDate){ lunarD -= lastDate; lunarM = LunarUtil.nextMonth(lunarY,lunarM); if(lunarM===1) lunarY++; lastDate = LunarUtil.getDaysOfMonth(lunarY,lunarM); } return _fromYmdHms(lunarY,lunarM,lunarD,hour,minute,second,solar); }; var _nutationLon2 = function(t) { var a, t2 = t * t, dl = 0; for (var i = 0, j = NUT_B.length; i < j; i += 5) { if (i == 0) { a = -1.742 * t; } else { a = 0; } dl += (NUT_B[i + 3] + a) * Math.sin(NUT_B[i] + NUT_B[i + 1] * t + NUT_B[i + 2] * t2); } return dl / 100 / SECOND_PER_RAD; }; var _eLon = function(t, n){ t /= 10; var v = 0, tn = 1; var n1,n2; var m; var c; var pn = 1; var n0, m0 = XL0[pn + 1] - XL0[pn]; for (var i = 0; i < 6; i++, tn *= t) { n1 = Math.floor(XL0[pn + i]); n2 = Math.floor(XL0[pn + 1 + i]); n0 = n2 - n1; if (n0 == 0) { continue; } if (n < 0) { m = n2; } else { m = Math.floor(3 * n * n0 / m0 + 0.5) + n1; if (i != 0) { m += 3; } if (m > n2) { m = n2; } } c = 0; for (var j = n1; j < m; j += 3) { c += XL0[j] * Math.cos(XL0[j + 1] + t * XL0[j + 2]); } v += c * tn; } v /= XL0[0]; var t2 = t * t, t3 = t2 * t; v += (-0.0728 - 2.7702 * t - 1.1019 * t2 - 0.0996 * t3) / SECOND_PER_RAD; return v; }; var _gxcSunLon = function(t){ var v = -0.043126 + 628.301955 * t - 0.000002732 * t * t; var e = 0.016708634 - 0.000042037 * t - 0.0000001267 * t * t; return -20.49552 * (1 + e * Math.cos(v)) / SECOND_PER_RAD; }; var _ev = function(t){ var f = 628.307585 * t; return 628.332 + 21 * Math.sin(1.527 + f) + 0.44 * Math.sin(1.48 + f * 2) + 0.129 * Math.sin(5.82 + f) * t + 0.00055 * Math.sin(4.21 + f) * t * t; }; var _saLon = function(t, n){ return _eLon(t, n) + _nutationLon2(t) + _gxcSunLon(t) + Math.PI; }; var _dtExt = function(y, jsd){ var dy = (y - 1820) / 100; return - 20 + jsd * dy * dy; }; var _dtCalc = function(y) { var size = DT_AT.length; var y0 = DT_AT[size - 2]; var t0 = DT_AT[size - 1]; if (y >= y0) { var jsd = 31; if (y > y0 + 100) { return _dtExt(y, jsd); } var v = _dtExt(y, jsd); var dv = _dtExt(y0, jsd) - t0; return v - dv * (y0 + 100 - y) / 100; } var i = 0; for (; i < size; i += 5) { if (y < DT_AT[i + 5]) { break; } } var t1 = (y - DT_AT[i]) / (DT_AT[i + 5] - DT_AT[i]) * 10, t2 = t1 * t1, t3 = t2 * t1; return DT_AT[i + 1] + DT_AT[i + 2] * t1 + DT_AT[i + 3] * t2 + DT_AT[i + 4] * t3; }; var _dtT = function(t){ return _dtCalc(t / 365.2425 + 2000) / 86400.0; }; var _saLonT = function(w){ var t, v = 628.3319653318; t = (w - 1.75347 - Math.PI) / v; v = _ev(t); t += (w - _saLon(t, 10)) / v; v = _ev(t); t += (w - _saLon(t, -1)) / v; return t; }; var _qiLow = function(w){ var t, l, v = 628.3319653318; t = (w - 4.895062166) / v; t -= (53 * t * t + 334116 * Math.cos(4.67 + 628.307585 * t) + 2061 * Math.cos(2.678 + 628.3076 * t) * t) / v / 10000000; l = 48950621.66 + 6283319653.318 * t + 53 * t * t + 334166 * Math.cos(4.669257 + 628.307585 * t) + 3489 * Math.cos(4.6261 + 1256.61517 * t) + 2060.6 * Math.cos(2.67823 + 628.307585 * t) * t - 994 - 834 * Math.sin(2.1824 - 33.75705 * t); t -= (l / 10000000 - w) / 628.332 + (32 * (t + 1.8) * (t + 1.8) - 20) / 86400 / 36525; return t * 36525 + 8 / 24; }; var _saLonT2 = function(w){ var t, v = 628.3319653318; t = (w - 1.75347 - Math.PI) / v; t -= (0.000005297 * t * t + 0.0334166 * Math.cos(4.669257 + 628.307585 * t) + 0.0002061 * Math.cos(2.67823 + 628.307585 * t) * t) / v; t += (w - _eLon(t, 8) - Math.PI + (20.5 + 17.2 * Math.sin(2.1824 - 33.75705 * t)) / SECOND_PER_RAD) / v; return t; }; var _qiHigh = function(w){ var t = _saLonT2(w) * 36525; t = t - _dtT(t) + 8 / 24; var v = ((t + 0.5) % 1) * 86400; if (v < 1200 || v > 86400 - 1200){ t = _saLonT(w) * 36525 - _dtT(t) + 8 / 24; } return t; }; var _calcJieQi = function(jd) { var size = QI_KB.length; var d = 0; var pc = 7; jd += 2451545; var f1 = QI_KB[0] - pc, f2 = QI_KB[size - 1] - pc, f3 = 2436935; if (jd < f1 || jd >= f3) { d = Math.floor(_qiHigh(Math.floor((jd + pc - 2451259) * 24 / 365.2422) * Math.PI / 12) + 0.5); }else if (jd >= f1 && jd < f2) { var i = 0; for (; i < size; i += 2) { if (jd + pc < QI_KB[i + 2]) { break; } } d = QI_KB[i] + QI_KB[i + 1] * Math.floor((jd + pc - QI_KB[i]) / QI_KB[i + 1]); d = Math.floor(d + 0.5); if (d == 1683460) { d++; } d -= 2451545; }else if (jd >= f2 && jd < f3) { d = Math.floor(_qiLow(Math.floor((jd + pc - 2451259) * 24 / 365.2422) * Math.PI / 12) + 0.5); var n = QB.substr(Math.floor ((jd - f2) / 365.2422 * 24), 1); if ('1'===n) { d += 1; } if ('2'===n) { d -= 1; } } return d; }; var _qiAccurate = function(w){ var t = _saLonT(w) * 36525; return t - _dtT(t) + 8 / 24; }; var _qiAccurate2 = function(jd) { var d = Math.PI / 12; var w = Math.floor((jd + 293) * 24 / 365.2422) * d; var a = _qiAccurate(w); if (a - jd > 5){ return _qiAccurate(w - d); }else if (a - jd < -5){ return _qiAccurate(w + d); } return a; }; var _computeJieQi = function(o,solar) { o['jieQiList'] = []; o['jieQi'] = {}; var jd = Math.floor((solar.getYear() - 2000) * 365.2422 + 180); var w = Math.floor((jd - 355 + 183) / 365.2422) * 365.2422 + 355; if (_calcJieQi(w) > jd){ w -= 365.2422; } var q,key; q = _calcJieQi(w - 15.2184); key = Lunar.JIE_QI_PREPEND; o['jieQiList'].push(key); o['jieQi'][key] = Solar.fromJulianDay(_qiAccurate2(q) + Solar.J2000); var size = JIE_QI.length; for (var i=0;i=liChun.toYmd()) { g++; z++; } if(solar.toYmdHms()>=liChun.toYmdHms()) { gExact++; zExact++; } } if(g<0){ g += 10; } if(g>=10){ g-=10; } if(z<0){ z += 12; } if(z>=12){ z-=12; } if(gExact<0){ gExact += 10; } if(gExact>=10){ gExact-=10; } if(zExact<0){ zExact += 12; } if(zExact>=12){ zExact-=12; } o['yearGanIndex'] = yearGanIndex; o['yearZhiIndex'] = yearZhiIndex; o['yearGanIndexByLiChun'] = g; o['yearZhiIndexByLiChun'] = z; o['yearGanIndexExact'] = gExact; o['yearZhiIndexExact'] = zExact; }; var _computeMonth = function(o,solar){ var start = null,i,j,jie; var end; var gOffset = ((o.yearGanIndexByLiChun%5+1)*2)%10; var gOffsetExact = ((o.yearGanIndexExact%5+1)*2)%10; //序号:大雪到小寒之间-2,小寒到立春之间-1,立春之后0 var index = -2; for(i=0,j=LunarUtil.JIE.length;i=symd&&ymd=stime&&time='23:00'&&hm<='23:59'){ dayGanExact++; if(dayGanExact>=10){ dayGanExact -= 10; } dayZhiExact++; if(dayZhiExact>=12){ dayZhiExact -= 12; } } o['dayGanIndexExact'] = dayGanExact; o['dayZhiIndexExact'] = dayZhiExact; }; var _computeTime = function(o,hour,minute){ var timeZhiIndex = LunarUtil.getTimeZhiIndex((hour<10?'0':'')+hour+':'+(minute<10?'0':'')+minute); o['timeZhiIndex'] = timeZhiIndex; o['timeGanIndex'] = (o['dayGanIndexExact']%5*2+timeZhiIndex)%10; }; var _computeWeek = function(o){ o['weekIndex'] = (o.dayOffset+LunarUtil.BASE_WEEK_INDEX)%7; }; var _compute = function(year,month,day,hour,minute,second,solar){ var dayOffset = LunarUtil.computeAddDays(year,month,day); var o = {dayOffset:dayOffset}; _computeJieQi(o,solar); _computeYear(o,solar,year); _computeMonth(o,solar); _computeDay(o,hour,minute); _computeTime(o,hour,minute); _computeWeek(o); return o; }; var _fromYmdHms = function(year,month,day,hour,minute,second,solar){ var _solar = solar?solar:(function(){ var y = LunarUtil.BASE_YEAR; var m = LunarUtil.BASE_MONTH; var d = LunarUtil.BASE_DAY; var diff = LunarUtil.getDaysOfMonth(y,m)-d; m = LunarUtil.nextMonth(y,m); while(true){ diff += LunarUtil.getDaysOfMonth(y,m); m = LunarUtil.nextMonth(y,m); if(m===1) y++; if(y===year&&m===month){ diff += day; break; } } var date = new Date(SolarUtil.BASE_YEAR+'/'+SolarUtil.BASE_MONTH+'/'+SolarUtil.BASE_DAY+' '+hour+':'+minute+':'+second); date.setDate(date.getDate()+diff); return Solar.fromDate(date); })(); var gz = _compute(year,month,day,hour,minute,second,_solar); return { _p:{ year:year, month:month, day:day, hour:hour, minute:minute, second:second, timeGanIndex:gz.timeGanIndex, timeZhiIndex:gz.timeZhiIndex, dayOffset:gz.dayOffset, dayGanIndex:gz.dayGanIndex, dayZhiIndex:gz.dayZhiIndex, dayGanIndexExact:gz.dayGanIndexExact, dayZhiIndexExact:gz.dayZhiIndexExact, dayGanIndexExact2:gz.dayGanIndexExact2, dayZhiIndexExact2:gz.dayZhiIndexExact2, monthGanIndex:gz.monthGanIndex, monthZhiIndex:gz.monthZhiIndex, monthGanIndexExact:gz.monthGanIndexExact, monthZhiIndexExact:gz.monthZhiIndexExact, yearGanIndex:gz.yearGanIndex, yearZhiIndex:gz.yearZhiIndex, yearGanIndexByLiChun:gz.yearGanIndexByLiChun, yearZhiIndexByLiChun:gz.yearZhiIndexByLiChun, yearGanIndexExact:gz.yearGanIndexExact, yearZhiIndexExact:gz.yearZhiIndexExact, weekIndex:gz.weekIndex, jieQi:gz.jieQi, jieQiList:gz.jieQiList, solar:_solar, eightChar:null }, getYear:function(){return this._p.year;}, getMonth:function(){return this._p.month;}, getDay:function(){return this._p.day;}, getHour:function(){return this._p.hour;}, getMinute:function(){return this._p.minute;}, getSecond:function(){return this._p.second;}, getTimeGanIndex:function(){return this._p.timeGanIndex;}, getTimeZhiIndex:function(){return this._p.timeZhiIndex;}, getDayGanIndexExact:function(){return this._p.dayGanIndexExact;}, getDayGanIndexExact2:function(){return this._p.dayGanIndexExact2;}, getDayZhiIndexExact:function(){return this._p.dayZhiIndexExact;}, getDayZhiIndexExact2:function(){return this._p.dayZhiIndexExact2;}, getMonthGanIndexExact:function(){return this._p.monthGanIndexExact;}, getMonthZhiIndexExact:function(){return this._p.monthZhiIndexExact;}, getYearGanIndexExact:function(){return this._p.yearGanIndexExact;}, getYearZhiIndexExact:function(){return this._p.yearZhiIndexExact;}, getGan:function(){return this.getYearGan();}, getZhi:function(){return this.getYearZhi();}, getYearGan:function(){return LunarUtil.GAN[this._p.yearGanIndex+1];}, getYearGanByLiChun:function(){return LunarUtil.GAN[this._p.yearGanIndexByLiChun+1];}, getYearGanExact:function(){return LunarUtil.GAN[this._p.yearGanIndexExact+1];}, getYearZhi:function(){return LunarUtil.ZHI[this._p.yearZhiIndex+1];}, getYearZhiByLiChun:function(){return LunarUtil.ZHI[this._p.yearZhiIndexByLiChun+1];}, getYearZhiExact:function(){return LunarUtil.ZHI[this._p.yearZhiIndexExact+1];}, getYearInGanZhi:function(){return this.getYearGan()+this.getYearZhi();}, getYearInGanZhiByLiChun:function(){return this.getYearGanByLiChun()+this.getYearZhiByLiChun();}, getYearInGanZhiExact:function(){return this.getYearGanExact()+this.getYearZhiExact();}, getMonthGan:function(){return LunarUtil.GAN[this._p.monthGanIndex+1];}, getMonthGanExact:function(){return LunarUtil.GAN[this._p.monthGanIndexExact+1];}, getMonthZhi:function(){return LunarUtil.ZHI[this._p.monthZhiIndex+1];}, getMonthZhiExact:function(){return LunarUtil.ZHI[this._p.monthZhiIndexExact+1];}, getMonthInGanZhi:function(){return this.getMonthGan()+this.getMonthZhi();}, getMonthInGanZhiExact:function(){return this.getMonthGanExact()+this.getMonthZhiExact();}, getDayGan:function(){return LunarUtil.GAN[this._p.dayGanIndex+1];}, getDayGanExact:function(){return LunarUtil.GAN[this._p.dayGanIndexExact+1];}, getDayGanExact2:function(){return LunarUtil.GAN[this._p.dayGanIndexExact2+1];}, getDayZhi:function(){return LunarUtil.ZHI[this._p.dayZhiIndex+1];}, getDayZhiExact:function(){return LunarUtil.ZHI[this._p.dayZhiIndexExact+1];}, getDayZhiExact2:function(){return LunarUtil.ZHI[this._p.dayZhiIndexExact2+1];}, getDayInGanZhi:function(){return this.getDayGan()+this.getDayZhi();}, getDayInGanZhiExact:function(){return this.getDayGanExact()+this.getDayZhiExact();}, getDayInGanZhiExact2:function(){return this.getDayGanExact2()+this.getDayZhiExact2();}, getTimeGan:function(){return LunarUtil.GAN[this._p.timeGanIndex+1];}, getTimeZhi:function(){return LunarUtil.ZHI[this._p.timeZhiIndex+1];}, getTimeInGanZhi:function(){return this.getTimeGan()+this.getTimeZhi();}, getShengxiao:function(){return this.getYearShengXiao();}, getYearShengXiao:function(){return LunarUtil.SHENGXIAO[this._p.yearZhiIndex+1];}, getYearShengXiaoByLiChun:function(){return LunarUtil.SHENGXIAO[this._p.yearZhiIndexByLiChun+1];}, getYearShengXiaoExact:function(){return LunarUtil.SHENGXIAO[this._p.yearZhiIndexExact+1];}, getMonthShengXiao:function(){return LunarUtil.SHENGXIAO[this._p.monthZhiIndex+1];}, getMonthShengXiaoExact:function(){return LunarUtil.SHENGXIAO[this._p.monthZhiIndexExact+1];}, getDayShengXiao:function(){return LunarUtil.SHENGXIAO[this._p.dayZhiIndex+1];}, getTimeShengXiao:function(){return LunarUtil.SHENGXIAO[this._p.timeZhiIndex+1];}, getYearInChinese:function(){ var y = (this._p.year+''); var s = ''; var zero = '0'.charCodeAt(0); for(var i=0,j=y.length;i-1) { start = 8; } else if ('辰戌丑未'.indexOf(yearZhi)>-1) { start = 5; } // 寅月起,所以需要-2 var monthIndex = this._p.monthZhiIndex-2; if(monthIndex<0){ monthIndex += 12; } var index = start-monthIndex-1; while(index<0){ index += 9; } return NineStar.fromIndex(index); }, getDayNineStar:function(){ //顺逆 var solarYmd = this._p.solar.toYmd(); var yuShui = this._p.jieQi['雨水'].toYmd(); var guYu = this._p.jieQi['谷雨'].toYmd(); var xiaZhi = this._p.jieQi['夏至'].toYmd(); var chuShu = this._p.jieQi['处暑'].toYmd(); var shuangJiang = this._p.jieQi['霜降'].toYmd(); var start = 6; var asc = false; if(solarYmd>=this._p.jieQi['冬至'].toYmd()&& solarYmd=yuShui && solarYmd=guYu && solarYmd=xiaZhi && solarYmd=chuShu && solarYmd8){ index -= 9; } if(index<0){ index += 9; } return NineStar.fromIndex(index); }, getTimeNineStar:function(){ //顺逆 var solarYmd = this._p.solar.toYmd(); var asc = false; if(solarYmd>=this._p.jieQi['冬至'].toYmd() && solarYmd-1) { start = asc?1:9; } else if ('辰戌丑未'.indexOf(dayZhi)>-1) { start = asc?4:6; } var index = asc?start+this._p.timeZhiIndex-1:start-this._p.timeZhiIndex-1; if(index>8){ index -= 9; } if(index<0){ index += 9; } return NineStar.fromIndex(index); }, getSolar:function(){ return this._p.solar; }, getJieQiTable:function(){ return this._p.jieQi; }, getJieQiList:function(){ return this._p.jieQiList; }, getNextJie:function(){return this._getNearJieQi(true,LunarUtil.JIE);}, getPrevJie:function(){return this._getNearJieQi(false,LunarUtil.JIE);}, getNextQi:function(){return this._getNearJieQi(true,LunarUtil.QI);}, getPrevQi:function(){return this._getNearJieQi(false,LunarUtil.QI);}, getNextJieQi:function(){return this._getNearJieQi(true,null);}, getPrevJieQi:function(){return this._getNearJieQi(false,null);}, _buildJieQi:function(name, solar){ var jie=false,qi=false,i,j; for(i=0,j=LunarUtil.JIE.length;itoday){ continue; } if(null==near || day>near.toYmdHms()) { name = jq; near = solar; } } } if(null==near){ return null; } return this._buildJieQi(name, near); }, getCurrentJieQi:function(){ var name = this.getJieQi(); return name.length>0 ? this._buildJieQi(name,_solar) : null; }, getCurrentJie:function(){ var name = this.getJie(); return name.length>0 ? this._buildJieQi(name,_solar) : null; }, getCurrentQi:function(){ var name = this.getQi(); return name.length>0 ? this._buildJieQi(name,_solar) : null; }, getEightChar:function(){ if(!this._p.eightChar){ this._p.eightChar=EightChar.fromLunar(this); } return this._p.eightChar; }, next:function(days){ var y = this._p.year,m = this._p.month,d = this._p.day,daysInMonth,rest; if(days>0){ daysInMonth = LunarUtil.getDaysOfMonth(y,m); rest = day+days; while(daysInMonth < rest) { if(m>0){ if(LunarUtil.getLeapMonth(y)!=m){ m++; }else{ m = -m; } }else{ m = 1-m; } if(13==m){ y++; m=1; } rest -= daysInMonth; daysInMonth = LunarUtil.getDaysOfMonth(y,m); } d = rest; }else if(days<0){ daysInMonth = day; rest = -days; while(daysInMonth <= rest) { if(m>0){ m--; if(0==m){ y--; m = LunarUtil.getLeapMonth(y)!=12?12:-12; } }else{ m = -m; } rest -= daysInMonth; daysInMonth = LunarUtil.getDaysOfMonth(y,m); } d = daysInMonth - rest; } return _fromYmdHms(y,m,d,this._p.hour,this._p.minute,this._p.second); }, getYearXun:function(){ return LunarUtil.getXun(this.getYearInGanZhi()); }, getMonthXun:function(){ return LunarUtil.getXun(this.getMonthInGanZhi()); }, getDayXun:function(){ return LunarUtil.getXun(this.getDayInGanZhi()); }, getTimeXun:function(){ return LunarUtil.getXun(this.getTimeInGanZhi()); }, getYearXunByLiChun:function(){ return LunarUtil.getXun(this.getYearInGanZhiByLiChun()); }, getYearXunExact:function(){ return LunarUtil.getXun(this.getYearInGanZhiExact()); }, getMonthXunExact:function(){ return LunarUtil.getXun(this.getMonthInGanZhiExact()); }, getDayXunExact:function(){ return LunarUtil.getXun(this.getDayInGanZhiExact()); }, getDayXunExact2:function(){ return LunarUtil.getXun(this.getDayInGanZhiExact2()); }, getYearXunKong:function(){ return LunarUtil.getXunKong(this.getYearInGanZhi()); }, getMonthXunKong:function(){ return LunarUtil.getXunKong(this.getMonthInGanZhi()); }, getDayXunKong:function(){ return LunarUtil.getXunKong(this.getDayInGanZhi()); }, getTimeXunKong:function(){ return LunarUtil.getXunKong(this.getTimeInGanZhi()); }, getYearXunKongByLiChun:function(){ return LunarUtil.getXunKong(this.getYearInGanZhiByLiChun()); }, getYearXunKongExact:function(){ return LunarUtil.getXunKong(this.getYearInGanZhiExact()); }, getMonthXunKongExact:function(){ return LunarUtil.getXunKong(this.getMonthInGanZhiExact()); }, getDayXunKongExact:function(){ return LunarUtil.getXunKong(this.getDayInGanZhiExact()); }, getDayXunKongExact2:function(){ return LunarUtil.getXunKong(this.getDayInGanZhiExact2()); }, toString:function(){ return this.getYearInChinese()+'年'+this.getMonthInChinese()+'月'+this.getDayInChinese(); }, toFullString:function(){ var s = this.toString(); s += ' '+this.getYearInGanZhi()+'('+this.getYearShengXiao()+')年'; s += ' '+this.getMonthInGanZhi()+'('+this.getMonthShengXiao()+')月'; s += ' '+this.getDayInGanZhi()+'('+this.getDayShengXiao()+')日'; s += ' '+this.getTimeZhi()+'('+this.getTimeShengXiao()+')时'; s += ' 纳音['+this.getYearNaYin()+' '+this.getMonthNaYin()+' '+this.getDayNaYin()+' '+this.getTimeNaYin()+']'; s += ' 星期'+this.getWeekInChinese(); var festivals = this.getFestivals(); var i,j; for(i=0,j=festivals.length;i0){ s += ' ['+jq+']'; } s += ' '+this.getGong()+'方'+this.getShou(); s += ' 星宿['+this.getXiu()+this.getZheng()+this.getAnimal()+']('+this.getXiuLuck()+')'; s += ' 彭祖百忌['+this.getPengZuGan()+' '+this.getPengZuZhi()+']'; s += ' 喜神方位['+this.getDayPositionXi()+']('+this.getDayPositionXiDesc()+')'; s += ' 阳贵神方位['+this.getDayPositionYangGui()+']('+this.getDayPositionYangGuiDesc()+')'; s += ' 阴贵神方位['+this.getDayPositionYinGui()+']('+this.getDayPositionYinGuiDesc()+')'; s += ' 福神方位['+this.getDayPositionFu()+']('+this.getDayPositionFuDesc()+')'; s += ' 财神方位['+this.getDayPositionCai()+']('+this.getDayPositionCaiDesc()+')'; s += ' 冲['+this.getDayChongDesc()+']'; s += ' 煞['+this.getDaySha()+']'; return s; } }; }; return { JIE_QI_PREPEND: 'DA_XUE', JIE_QI_APPEND: 'DONG_ZHI', JIE_APPEND_SOLAR_FIRST: 'XIAO_HAN', QI_APPEND_SOLAR_SECOND: 'DA_HAN', JIE_QI_FIRST: '冬至', JIE_QI_LAST: '大雪', JIE_SOLAR_FIRST: '小寒', QI_SOLAR_SECOND: '大寒', fromYmdHms:function(y,m,d,hour,minute,second){return _fromYmdHms(y,m,d,hour,minute,second);}, fromYmd:function(y,m,d){return _fromYmdHms(y,m,d,0,0,0);}, fromDate:function(date){return _fromDate(date);} }; })(); var SolarWeek = (function(){ var _fromDate = function(date,start){ return _fromYmd(date.getFullYear(),date.getMonth()+1,date.getDate(),start); }; var _fromYmd = function(y,m,d,start){ return { _p:{ year:y, month:m, day:d, start:start, calendar:new Date(y+'/'+m+'/'+d) }, getYear:function(){ return this._p.year; }, getMonth:function(){ return this._p.month; }, getDay:function(){ return this._p.day; }, getStart:function(){ return this._p.start; }, /** * 获取当前日期是在当月第几周 * @return number 周序号,从1开始 */ getIndex:function(){ var firstDate = new Date(this._p.year+'/'+this._p.month+'/1'); var firstDayWeek = firstDate.getDay(); if(firstDayWeek===0){ firstDayWeek = 7; } return Math.ceil((this._p.day+firstDayWeek-this._p.start)/7); }, /** * 周推移 * @param weeks 推移的周数,负数为倒推 * @param separateMonth 是否按月单独计算 * @return object 推移后的阳历周 */ next:function(weeks,separateMonth){ if(0===weeks){ return _fromYmd(this._p.year,this._p.month,this._p.day,this._p.start); } var date; if(separateMonth){ var n = weeks; date = new Date(this._p.year+'/'+this._p.month+'/'+this._p.day); var week = _fromDate(date,this._p.start); var month = this._p.month; var plus = n>0; while(0!==n){ date.setDate(date.getDate()+(plus?7:-7)); week = _fromDate(date,this._p.start); var weekMonth = week.getMonth(); if(month!==weekMonth){ var index = week.getIndex(); if(plus){ if(1===index){ var firstDay = week.getFirstDay(); week = _fromYmd(firstDay.getYear(),firstDay.getMonth(),firstDay.getDay(),this._p.start); weekMonth = week.getMonth(); }else{ date = new Date(week.getYear()+'/'+week.getMonth()+'/1'); week = _fromDate(date,this._p.start); } }else{ var size = SolarUtil.getWeeksOfMonth(week.getYear(),week.getMonth(),this._p.start); if(size===index){ var lastDay = week.getFirstDay().next(6); week = _fromYmd(lastDay.getYear(),lastDay.getMonth(),lastDay.getDay(),this._p.start); weekMonth = week.getMonth(); }else{ date = new Date(week.getYear()+'/'+week.getMonth()+'/'+SolarUtil.getDaysOfMonth(week.getYear(),week.getMonth())); week = _fromDate(date,this._p.start); } } month = weekMonth; } n-=plus?1:-1; } return week; }else{ date = new Date(this._p.year+'/'+this._p.month+'/'+this._p.day); date.setDate(date.getDate()+weeks*7); return _fromDate(date,this._p.start); } }, /** * 获取本周第一天的阳历日期(可能跨月) * @return object 本周第一天的阳历日期 */ getFirstDay:function(){ var date = new Date(this._p.year+'/'+this._p.month+'/'+this._p.day); var prev = date.getDay()-this._p.start; if(prev<0){ prev += 7; } date.setDate(date.getDate()-prev); return Solar.fromDate(date); }, /** * 获取本周第一天的阳历日期(仅限当月) * @return object 本周第一天的阳历日期 */ getFirstDayInMonth:function(){ var index = 0; var days = this.getDays(); for(var i = 0;i>4)&0x0F; return v; }, nextMonth:function(y,m){ var n = Math.abs(m)+1; if(m>0){ if(m==LunarUtil.getLeapMonth(y)){ n = -m; } } return 13!=n?n:1; }, getDaysOfMonth:function(year,month){ var index = year-this.BASE_YEAR+this.BASE_INDEX; var v = 0,l = 0,d = 30; if(1<=month&&month<=8){ v = this.LUNAR_MONTH[2*index]; l = month-1; if(((v>>l)&0x01)===1){ d = 29; } }else if(9<=month&&month<=12){ v = this.LUNAR_MONTH[2*index+1]; l = month-9; if(((v>>l)&0x01)===1){ d = 29; } }else{ v = this.LUNAR_MONTH[2*index+1]; v = (v>>4)&0x0F; if(v!==Math.abs(month)){ d = 0; }else{ d = 29; for(var i = 0;i5){ hm = hm.substr(0,5); } var x = 1; for(var i=1;i<22;i+=2){ if(hm>=((i<10?'0':'')+i+':00')&&hm<=((i+1<10?'0':'')+(i+1)+':59')){ return x; } x++; } return 0; }, convertTime:function(hm){ return this.ZHI[this.getTimeZhiIndex(hm)+1]; }, getJiaZiIndex:function(ganZhi){ for(var i=0,j=this.JIA_ZI.length;i-1) { right = right.substr(index+3); var left = right; if (left.indexOf('=')>-1) { left = left.substr(0, left.indexOf('=') - 2); } var matched = false; var months = left.substr(0, left.indexOf(':')); var i,m,j; for (i = 0, j = months.length; i < j; i += 2) { m = months.substr(i, 2); if (m==month) { matched = true; break; } } if(matched) { var ys = left.substr(left.indexOf(':') + 1); ys = ys.substr(0, ys.indexOf(',')); for (i = 0, j = ys.length; i < j; i += 2) { m = ys.substr(i, 2); l.push(this.YI_JI[parseInt(m,16)]); } break; } index = right.indexOf(day+'='); } if(l.length<1){ l.push('无'); } return l; }, getDayJi:function(monthGanZhi,dayGanZhi){ var l = []; var day = this.hex(this.getJiaZiIndex(dayGanZhi)); var month = this.hex(this.getJiaZiIndex(monthGanZhi)); var right = this.DAY_YI_JI; var index = right.indexOf(day+'='); while(index>-1) { right = right.substr(index+3); var left = right; if (left.indexOf('=')>-1) { left = left.substr(0, left.indexOf('=') - 2); } var matched = false; var months = left.substr(0, left.indexOf(':')); var i,m,j; for (i = 0, j = months.length; i < j; i += 2) { m = months.substr(i, 2); if (m==month) { matched = true; break; } } if(matched) { var js = left.substr(left.indexOf(',')+1); for (i = 0, j = js.length; i < j; i += 2) { m = js.substr(i, 2); l.push(this.YI_JI[parseInt(m,16)]); } break; } index = right.indexOf(day+'='); } if(l.length<1){ l.push('无'); } return l; }, getDayJiShen:function(lunarMonth,dayGanZhi){ var l = []; var day = this.hex(this.getJiaZiIndex(dayGanZhi)); var month = Math.abs(lunarMonth).toString(16).toUpperCase(); var index = this.DAY_SHEN_SHA.indexOf(month+day+'='); if(index>-1) { var left = this.DAY_SHEN_SHA.substr(index + 4); if (left.indexOf('=')>-1) { left = left.substr(0, left.indexOf('=') - 3); } var js = left.substr(0, left.indexOf(',')); for (var i = 0, j = js.length; i < j; i += 2) { var m = js.substr(i, 2); l.push(this.SHEN_SHA[parseInt(m, 16)]); } } if(l.length<1){ l.push('无'); } return l; }, getDayXiongSha:function(lunarMonth,dayGanZhi){ var l = []; var day = this.hex(this.getJiaZiIndex(dayGanZhi)); var month = Math.abs(lunarMonth).toString(16).toUpperCase(); var index = this.DAY_SHEN_SHA.indexOf(month+day+'='); if(index>-1) { var left = this.DAY_SHEN_SHA.substr(index + 4); if (left.indexOf('=')>-1) { left = left.substr(0, left.indexOf('=') - 3); } var xs = left.substr(left.indexOf(',')+1); for (var i = 0, j = xs.length; i < j; i += 2) { var m = xs.substr(i, 2); l.push(this.SHEN_SHA[parseInt(m, 16)]); } } if(l.length<1){ l.push('无'); } return l; }, getTimeYi:function(dayGanZhi,timeGanZhi){ var l = []; var day = this.hex(this.getJiaZiIndex(dayGanZhi)); var time = this.hex(this.getJiaZiIndex(timeGanZhi)); var index = this.TIME_YI_JI.indexOf(day+time+'='); if(index>-1) { var left = this.TIME_YI_JI.substr(index + 5); if (left.indexOf('=')>-1) { left = left.substr(0, left.indexOf('=') - 4); } var ys = left.substr(0, left.indexOf(',')); for (var i = 0, j = ys.length; i < j; i += 2) { var m = ys.substr(i, 2); l.push(this.YI_JI[parseInt(m, 16)]); } } if(l.length<1){ l.push('无'); } return l; }, getTimeJi:function(dayGanZhi,timeGanZhi){ var l = []; var day = this.hex(this.getJiaZiIndex(dayGanZhi)); var time = this.hex(this.getJiaZiIndex(timeGanZhi)); var index = this.TIME_YI_JI.indexOf(day+time+'='); if(index>-1) { var left = this.TIME_YI_JI.substr(index + 5); if (left.indexOf('=')>-1) { left = left.substr(0, left.indexOf('=') - 4); } var js = left.substr(left.indexOf(',')+1); for (var i = 0, j = js.length; i < j; i += 2) { var m = js.substr(i, 2); l.push(this.YI_JI[parseInt(m, 16)]); } } if(l.length<1){ l.push('无'); } return l; }, getXunIndex:function(ganZhi){ var gan = ganZhi.substr(0,1); var zhi = ganZhi.substr(1); var ganIndex = 0; var zhiIndex = 0; var i,j; for(i=0,j=this.GAN.length;i0){ right = right.substr(n); } while((0!==right.indexOf(key))&&right.length>=_SIZE){ right = right.substr(_SIZE); } return right; }; var _findBackward = function(key){ var start = _DATA_IN_USE.lastIndexOf(key); if(start<0) { return null; } var keySize = key.length; var left = _DATA_IN_USE.substr(0,start+keySize); var size = left.length; var n = size%_SIZE; if(n>0){ left = left.substr(0,size-n); } size = left.length; while((size-keySize!==left.lastIndexOf(key))&&size>=_SIZE){ left = left.substr(0,size-_SIZE); size = left.length; } return left; }; var _findHolidaysForward = function(key){ var l = []; var s = _findForward(key); if(null==s) { return l; } while(0===s.indexOf(key)){ l.push(_buildHolidayForward(s)); s = s.substr(_SIZE); } return l; }; var _findHolidaysBackward = function(key){ var l = []; var s = _findBackward(key); if(null==s) { return l; } var size = s.length; var keySize = key.length; while(size-keySize===s.lastIndexOf(key)){ l.push(_buildHolidayBackward(s)); s = s.substr(0,size-_SIZE); size = s.length; } l.reverse(); return l; }; var _getHoliday = function(args){ var l = []; switch(args.length){ case 1: l = _findHolidaysForward(args[0].replace(/-/g,'')); break; case 3: l = _findHolidaysForward(args[0]+_padding(args[1])+_padding(args[2])); break; } return l.length<1?null:l[0]; }; var _getHolidays = function(args){ var l = []; switch(args.length){ case 1: l = _findHolidaysForward((args[0]+'').replace(/-/g,'')); break; case 2: l = _findHolidaysForward(args[0]+_padding(args[1])); break; } return l; }; var _getHolidaysByTarget = function(args){ var l = []; switch(args.length){ case 1: l = _findHolidaysBackward((args[0]+'').replace(/-/g,'')); break; case 3: l = _findHolidaysBackward(args[0]+_padding(args[1])+_padding(args[2])); break; } return l; }; var _fixNames = function(names){ if(names){ _NAMES_IN_USE = names; } }; var _fixData = function(data){ if(!data){ return; } var append = []; while(data.length>=_SIZE){ var segment = data.substr(0,_SIZE); var day = segment.substr(0,8); var holiday = _getHoliday([day]); if(!holiday){ append.push(segment); }else{ var nameIndex = -1; for(var i=0,j=_NAMES_IN_USE.length;i-1){ var old = day+String.fromCharCode(nameIndex+_ZERO)+(holiday.isWork()?'0':'1')+holiday.getTarget().replace(/-/g,''); _DATA_IN_USE = _DATA_IN_USE.replace(new RegExp(old, 'g'), segment); } } data = data.substr(_SIZE); } if(append.length>0){ _DATA_IN_USE += append.join(''); } }; var _fix = function(args){ switch(args.length){ case 1: _fixData(args[0]); break; case 2: _fixNames(args[0]); _fixData(args[1]); break; } }; return { NAMES:_NAMES, getHoliday:function(){return _getHoliday(arguments);}, getHolidays:function(){return _getHolidays(arguments);}, getHolidaysByTarget:function(){return _getHolidaysByTarget(arguments);}, fix:function(){_fix(arguments);} }; })(['元旦节','春节','清明节','劳动节','端午节','中秋节','国庆节','国庆中秋','抗战胜利日']); var NineStar = (function(){ var _fromIndex=function(index){ return { _p:{index:index}, getNumber:function(){return NineStar.NUMBER[this._p.index];}, getColor:function(){return NineStar.COLOR[this._p.index];}, getWuXing:function(){return NineStar.WU_XING[this._p.index];}, getPosition:function(){return NineStar.POSITION[this._p.index];}, getPositionDesc:function(){return LunarUtil.POSITION_DESC[this.getPosition()];}, getNameInXuanKong:function(){return NineStar.NAME_XUAN_KONG[this._p.index];}, getNameInBeiDou:function(){return NineStar.NAME_BEI_DOU[this._p.index];}, getNameInQiMen:function(){return NineStar.NAME_QI_MEN[this._p.index];}, getNameInTaiYi:function(){return NineStar.NAME_TAI_YI[this._p.index];}, getLuckInQiMen:function(){return NineStar.LUCK_QI_MEN[this._p.index];}, getLuckInXuanKong:function(){return NineStar.LUCK_XUAN_KONG[this._p.index];}, getYinYangInQiMen:function(){return NineStar.YIN_YANG_QI_MEN[this._p.index];}, getTypeInTaiYi:function(){return NineStar.TYPE_TAI_YI[this._p.index];}, getBaMenInQiMen:function(){return NineStar.BA_MEN_QI_MEN[this._p.index];}, getSongInTaiYi:function(){return NineStar.SONG_TAI_YI[this._p.index];}, getIndex:function(){return this._p.index;}, toString:function(){return this.getNumber()+this.getColor()+this.getWuXing()+this.getNameInBeiDou();}, toFullString:function(){ var s = this.getNumber(); s += this.getColor(); s += this.getWuXing(); s += ' '; s += this.getPosition(); s += '('; s += this.getPositionDesc(); s += ') '; s += this.getNameInBeiDou(); s += ' 玄空['; s += this.getNameInXuanKong(); s += ' '; s += this.getLuckInXuanKong(); s += '] 奇门['; s += this.getNameInQiMen(); s += ' '; s += this.getLuckInQiMen(); if(this.getBaMenInQiMen().length>0) { s += ' '; s += this.getBaMenInQiMen(); s += '门'; } s += ' '; s += this.getYinYangInQiMen(); s += '] 太乙['; s += this.getNameInTaiYi(); s += ' '; s += this.getTypeInTaiYi(); s += ']'; return s; } }; }; return { NUMBER:['一','二','三','四','五','六','七','八','九'], COLOR:['白','黒','碧','绿','黄','白','赤','白','紫'], WU_XING:['水','土','木','木','土','金','金','土','火'], POSITION:['坎','坤','震','巽','中','乾','兑','艮','离'], NAME_BEI_DOU:['天枢','天璇','天玑','天权','玉衡','开阳','摇光','洞明','隐元'], NAME_XUAN_KONG:['贪狼','巨门','禄存','文曲','廉贞','武曲','破军','左辅','右弼'], NAME_QI_MEN:['天蓬','天芮','天冲','天辅','天禽','天心','天柱','天任','天英'], BA_MEN_QI_MEN:['休','死','伤','杜','','开','惊','生','景'], NAME_TAI_YI:['太乙','摄提','轩辕','招摇','天符','青龙','咸池','太阴','天乙'], TYPE_TAI_YI:['吉神','凶神','安神','安神','凶神','吉神','凶神','吉神','吉神'], SONG_TAI_YI:['门中太乙明,星官号贪狼,赌彩财喜旺,婚姻大吉昌,出入无阻挡,参谒见贤良,此行三五里,黑衣别阴阳。','门前见摄提,百事必忧疑,相生犹自可,相克祸必临,死门并相会,老妇哭悲啼,求谋并吉事,尽皆不相宜,只可藏隐遁,若动伤身疾。','出入会轩辕,凡事必缠牵,相生全不美,相克更忧煎,远行多不利,博彩尽输钱,九天玄女法,句句不虚言。','招摇号木星,当之事莫行,相克行人阻,阴人口舌迎,梦寐多惊惧,屋响斧自鸣,阴阳消息理,万法弗违情。','五鬼为天符,当门阴女谋,相克无好事,行路阻中途,走失难寻觅,道逢有尼姑,此星当门值,万事有灾除。','神光跃青龙,财气喜重重,投入有酒食,赌彩最兴隆,更逢相生旺,休言克破凶,见贵安营寨,万事总吉同。','吾将为咸池,当之尽不宜,出入多不利,相克有灾情,赌彩全输尽,求财空手回,仙人真妙语,愚人莫与知,动用虚惊退,反复逆风吹。','坐临太阴星,百祸不相侵,求谋悉成就,知交有觅寻,回风归来路,恐有殃伏起,密语中记取,慎乎莫轻行。','迎来天乙星,相逢百事兴,运用和合庆,茶酒喜相迎,求谋并嫁娶,好合有天成,祸福如神验,吉凶甚分明。'], LUCK_XUAN_KONG:['吉','凶','凶','吉','凶','吉','凶','吉','吉'], LUCK_QI_MEN:['大凶','大凶','小吉','大吉','大吉','大吉','小凶','小吉','小凶'], YIN_YANG_QI_MEN:['阳','阴','阳','阳','阳','阴','阴','阳','阴'], fromIndex:function(index){return _fromIndex(index);} }; })(); var EightChar = (function(){ var CHANG_SHENG_OFFSET = {'甲':1,'丙':10,'戊':10,'庚':7,'壬':4,'乙':6,'丁':9,'己':9,'辛':0,'癸':3}; var _fromLunar=function(lunar){ return { _p:{sect:2,lunar:lunar}, setSect:function(sect){this._p.sect=(1==sect)?1:2;}, getSect:function(){return this._p.sect;}, getDayGanIndex:function(){return 2==this._p.sect?this._p.lunar.getDayGanIndexExact2():this._p.lunar.getDayGanIndexExact();}, getDayZhiIndex:function(){return 2==this._p.sect?this._p.lunar.getDayZhiIndexExact2():this._p.lunar.getDayZhiIndexExact();}, getYear:function(){return this._p.lunar.getYearInGanZhiExact();}, getYearGan:function(){return this._p.lunar.getYearGanExact();}, getYearZhi:function(){return this._p.lunar.getYearZhiExact();}, getYearHideGan:function(){return LunarUtil.ZHI_HIDE_GAN[this.getYearZhi()];}, getYearWuXing:function(){return LunarUtil.WU_XING_GAN[this.getYearGan()]+LunarUtil.WU_XING_ZHI[this.getYearZhi()];}, getYearNaYin:function(){return LunarUtil.NAYIN[this.getYear()];}, getYearShiShenGan:function(){return LunarUtil.SHI_SHEN_GAN[this.getDayGan()+this.getYearGan()];}, getYearShiShenZhi:function(){ var dayGan = this.getDayGan(); var zhi = this.getYearZhi(); var hideGan = LunarUtil.ZHI_HIDE_GAN[zhi]; var l = []; for(var i=0,j=hideGan.length;i=12){ index -= 12; } if(index<0){ index += 12; } return EightChar.CHANG_SHENG[index]; }, getYearDiShi:function(){return this._getDiShi(this._p.lunar.getYearZhiIndexExact());}, getYearXun:function(){return this._p.lunar.getYearXunExact()}, getYearXunKong:function(){return this._p.lunar.getYearXunKongExact()}, getMonth:function(){return this._p.lunar.getMonthInGanZhiExact();}, getMonthGan:function(){return this._p.lunar.getMonthGanExact();}, getMonthZhi:function(){return this._p.lunar.getMonthZhiExact();}, getMonthHideGan:function(){return LunarUtil.ZHI_HIDE_GAN[this.getMonthZhi()];}, getMonthWuXing:function(){return LunarUtil.WU_XING_GAN[this.getMonthGan()]+LunarUtil.WU_XING_ZHI[this.getMonthZhi()];}, getMonthNaYin:function(){return LunarUtil.NAYIN[this.getMonth()];}, getMonthShiShenGan:function(){return LunarUtil.SHI_SHEN_GAN[this.getDayGan()+this.getMonthGan()];}, getMonthShiShenZhi:function(){ var dayGan = this.getDayGan(); var zhi = this.getMonthZhi(); var hideGan = LunarUtil.ZHI_HIDE_GAN[zhi]; var l = []; for(var i=0,j=hideGan.length;i=10){ ganIndex -= 10; } var zhiIndex = this._p.lunar.getMonthZhiIndexExact() + 3; if(zhiIndex>=12){ zhiIndex -= 12; } return LunarUtil.GAN[ganIndex+1]+LunarUtil.ZHI[zhiIndex+1]; }, getTaiYuanNaYin:function(){return LunarUtil.NAYIN[this.getTaiYuan()];}, getMingGong:function(){ var monthZhiIndex = 0; var timeZhiIndex = 0; for(var i=0,j=EightChar.MONTH_ZHI.length;i12){ zhiIndex -= 12; } var jiaZiIndex = LunarUtil.getJiaZiIndex(lunar.getMonthInGanZhiExact()) - (monthZhiIndex-zhiIndex); if(jiaZiIndex>=60){ jiaZiIndex -= 60; } if(jiaZiIndex<0){ jiaZiIndex += 60; } return LunarUtil.JIA_ZI[jiaZiIndex]; }, getMingGongNaYin:function(){return LunarUtil.NAYIN[this.getMingGong()];}, getShenGong:function(){ var monthZhiIndex = 0; var timeZhiIndex = 0; for(var i=0,j=EightChar.MONTH_ZHI.length;i=60){ jiaZiIndex -= 60; } if(jiaZiIndex<0){ jiaZiIndex += 60; } return LunarUtil.JIA_ZI[jiaZiIndex]; }, getShenGongNaYin:function(){return LunarUtil.NAYIN[this.getShenGong()];}, getLunar:function(){return this._p.lunar;}, getYun:function(gender){ var lunar = this.getLunar(); var yang = 0 === lunar.getYearGanIndexExact() % 2; var man = 1 === gender; var forward = (yang && man) || (!yang && !man); var start = (function(){ var prev = lunar.getPrevJie(); var next = lunar.getNextJie(); var current = lunar.getSolar(); var start = forward ? current : prev.getSolar(); var end = forward ? next.getSolar() : current; var hourDiff = LunarUtil.getTimeZhiIndex(end.toYmdHms().substr(11, 5)) - LunarUtil.getTimeZhiIndex(start.toYmdHms().substr(11, 5)); var endCalendar = new Date(end.getYear(), end.getMonth() - 1, end.getDay()); var startCalendar = new Date(start.getYear(), start.getMonth() - 1, start.getDay()); // 天数差 var dayDiff = Math.floor((endCalendar - startCalendar) / (1000 * 3600 * 24)); if (hourDiff < 0) { hourDiff += 12; dayDiff--; } var monthDiff = Math.floor(hourDiff * 10 / 30); var month = dayDiff * 4 + monthDiff; var day = hourDiff * 10 - monthDiff * 30; var year = Math.floor(month / 12); month = month - year * 12; return { year: year, month: month, day: day }; })(); var buildLiuYue = function(liuNian, index){ return { _p: { index: index, liuNian: liuNian }, getIndex:function(){return this._p.index;}, getMonthInChinese:function(){return LunarUtil.MONTH[this._p.index + 1];}, getGanZhi:function(){ var offset = 0; var yearGan = liuNian.getGanZhi().substr(0, 1); if ('甲'===yearGan || '己'===yearGan) { offset = 2; } else if ('乙'===yearGan || '庚'===yearGan) { offset = 4; } else if ('丙'===yearGan || '辛'===yearGan) { offset = 6; } else if ('丁'===yearGan || '壬'===yearGan) { offset = 8; } var gan = LunarUtil.GAN[(this._p.index + offset) % 10 + 1]; var zhi = LunarUtil.ZHI[(this._p.index + LunarUtil.BASE_MONTH_ZHI_INDEX) % 12 + 1]; return gan + zhi; }, getXun:function(){return LunarUtil.getXun(this.getGanZhi());}, getXunKong:function(){return LunarUtil.getXunKong(this.getGanZhi());} }; }; var buildLiuNian = function(daYun, index){ return { _p: { year: daYun.getStartYear() + index, age: daYun.getStartAge() + index, index: index, daYun: daYun, lunar: daYun.getLunar() }, getYear: function(){return this._p.year;}, getAge: function(){return this._p.age;}, getIndex: function(){return this._p.index;}, getLunar: function(){return this._p.lunar;}, getGanZhi: function(){ var offset = LunarUtil.getJiaZiIndex(this._p.lunar.getJieQiTable()['立春'].getLunar().getYearInGanZhiExact()) + this._p.index; if (this._p.daYun.getIndex() > 0) { offset += this._p.daYun.getStartAge() - 1; } offset %= LunarUtil.JIA_ZI.length; return LunarUtil.JIA_ZI[offset]; }, getXun:function(){return LunarUtil.getXun(this.getGanZhi());}, getXunKong:function(){return LunarUtil.getXunKong(this.getGanZhi());}, getLiuYue: function(){ var l = []; for (var i = 0; i < 12; i++) { l.push(buildLiuYue(this,i)); } return l; } }; }; var buildXiaoYun = function(daYun, index, forward){ return { _p: { year: daYun.getStartYear() + index, age: daYun.getStartAge() + index, index: index, daYun: daYun, forward: forward, lunar: daYun.getLunar() }, getYear: function(){return this._p.year;}, getAge: function(){return this._p.age;}, getIndex: function(){return this._p.index;}, getGanZhi: function(){ var offset = LunarUtil.getJiaZiIndex(this._p.lunar.getTimeInGanZhi()); var add = this._p.index + 1; if (this._p.daYun.getIndex() > 0) { add += this._p.daYun.getStartAge() - 1; } offset += this._p.forward ? add : -add; var size = LunarUtil.JIA_ZI.length; while (offset < 0) { offset += size; } offset %= size; return LunarUtil.JIA_ZI[offset]; }, getXun:function(){return LunarUtil.getXun(this.getGanZhi());}, getXunKong:function(){return LunarUtil.getXunKong(this.getGanZhi());} }; }; var buildDaYun = function(yun, index){ var birthYear = yun.getLunar().getSolar().getYear(); var year = yun.getStartSolar().getYear(); var startYear,startAge,endYear,endAge; if (index < 1) { startYear = birthYear; startAge = 1; endYear = year - 1; endAge = year - birthYear; } else { var add = (index - 1) * 10; startYear = year + add; startAge = startYear - birthYear + 1; endYear = startYear + 9; endAge = startAge + 9; } return { _p: { startYear: startYear, endYear: endYear, startAge: startAge, endAge: endAge, index: index, yun: yun, lunar: yun.getLunar() }, getStartYear: function(){return this._p.startYear;}, getEndYear: function(){return this._p.endYear;}, getStartAge: function(){return this._p.startAge;}, getEndAge: function(){return this._p.endAge;}, getIndex: function(){return this._p.index;}, getLunar: function(){return this._p.lunar;}, getGanZhi: function(){ if (this._p.index < 1) { return ''; } var offset = LunarUtil.getJiaZiIndex(this._p.lunar.getMonthInGanZhiExact()); offset += this._p.yun.isForward() ? this._p.index : -this._p.index; var size = LunarUtil.JIA_ZI.length; if (offset >= size) { offset -= size; } if (offset < 0) { offset += size; } return LunarUtil.JIA_ZI[offset]; }, getXun:function(){return LunarUtil.getXun(this.getGanZhi());}, getXunKong:function(){return LunarUtil.getXunKong(this.getGanZhi());}, getLiuNian: function(){ var n = 10; if (this._p.index < 1) { n = this._p.endYear-this._p.startYear+1; } var l = []; for (var i = 0; i < n; i++) { l.push(buildLiuNian(this,i)); } return l; }, getXiaoYun: function(){ var n = 10; if (this._p.index < 1) { n = this._p.endYear-this._p.startYear+1; } var l = []; for (var i = 0; i < n; i++) { l.push(buildXiaoYun(this,i,this._p.yun.isForward())); } return l; } }; }; return { _p: { gender: gender, startYear: start.year, startMonth: start.month, startDay: start.day, forward: forward, lunar: lunar }, getGender: function(){return this._p.gender;}, getStartYear: function(){return this._p.startYear;}, getStartMonth: function(){return this._p.startMonth;}, getStartDay: function(){return this._p.startDay;}, isForward: function(){return this._p.forward;}, getLunar: function(){return this._p.lunar;}, getStartSolar: function(){ var birth = this._p.lunar.getSolar(); var c = new Date(birth.getYear() + this._p.startYear, birth.getMonth() - 1+this._p.startMonth, birth.getDay() + this._p.startDay); return Solar.fromDate(c); }, getDaYun: function(){ var l = []; for (var i = 0; i < 10; i++) { l.push(buildDaYun(this,i)); } return l; } }; }, toString:function(){return this.getYear()+' '+this.getMonth()+' '+this.getDay()+' '+this.getTime();} }; }; return { MONTH_ZHI:['','寅','卯','辰','巳','午','未','申','酉','戌','亥','子','丑'], CHANG_SHENG:['长生','沐浴','冠带','临官','帝旺','衰','病','死','墓','绝','胎','养'], fromLunar:function(lunar){return _fromLunar(lunar);} }; })(); return { SolarUtil:SolarUtil, LunarUtil:LunarUtil, Solar:Solar, Lunar:Lunar, NineStar:NineStar, EightChar:EightChar, SolarWeek:SolarWeek, SolarMonth:SolarMonth, SolarSeason:SolarSeason, SolarHalfYear:SolarHalfYear, SolarYear:SolarYear, HolidayUtil:HolidayUtil }; });