hao123万年历中的农历显示源码
作者: 郑晓 分类: javacript 发布于: 2016-10-08 17:33 浏览:7,208 评论(13)
郑晓在朋友圈听说明年的中秋和国庆完全重叠了,突然感到非常的惊恐和不安,于是打开hao123万年历查了一下…
然后就像不知道1+1=2是什么原因一样,郑晓打开它的源码研究了起来。把它农历计算的部分都摘出来了,还写了调用方法,有需要的可以参考。它原程序中还有黄历的宜忌显示,数据都是写死的,一年一个文件感觉挺蛋疼就没弄。
!function() {
function i(i) {
var t = new Date(i);
return - 0x94e9b950e00 > +t ? null: new e(t)
}
function e(i) {
this.oDate = i,
this.julianDay = A.fromDate(this.oDate),
this.cnDay = this.oDate.getDay() ? f.digitCN[this.oDate.getDay()] : "日";
for (var e, t = this.julianDay - A.JD2000,
a = F.getTerms(t), h = s.getNewMoons(a), g = Math.round(t - h[0].JD), k = 0; k < h.length; k++) {
if (e = h[k], g < e.days) {
this.isBigMonth = 30 == e.days,
this.isLeap = e.isLeap,
this.lMonth = e.name,
this.lNextMonth = e.nextName,
this.lDate = f.dateCn[g],
this.dateIndex = g;
break
}
g -= e.days
}
t = Math.round(t),
this.lYear = Math.floor((a[3].JD + (t < a[3].JD ? -365 : 0) + 5844 - 35) / 365.2422 + .5);
var n = h[h.zyIndex].JD;
n -= n > t ? 365 : 0,
n += 5810,
this.sYear = Math.floor(n / 365.2422 + .5),
this.hYear = this.sYear + 1984 + 2698;
var n = a.hash[t];
this.term = n ? n.name: "";
var n = this.lYear + 6e3;
this.animal = f.chineseZodiac[n % 12],
this.gzYear = f.heavenlyStems[n % 10] + f.earthlyBranches[n % 12];
var n = Math.floor((t - a[0].JD) / 30.43685);
12 > n && t >= a[2 * n + 1].JD && n++,
n += 12 * Math.floor((a[12].JD + 390) / 365.2422) + 9e5,
this.gzMonth = f.heavenlyStems[n % 10] + f.earthlyBranches[n % 12];
var n = t - 6 + 9e6;
this.gzDate = f.heavenlyStems[n % 10] + f.earthlyBranches[n % 12],
this.gzChrono = f.earthlyBranches[Math.floor((this.oDate.getHours() + 1) / 2)] || "子"
}
function t(i) {
var e = -.043126 + 628.301955 * i - 2732e-9 * i * i,
t = .016708634 - 42037e-9 * i - 1.267e-7 * i * i;
return - 20.49552 * (1 + t * Math.cos(e)) / D
}
function a() {
return - 34e-7
}
function h(i) {
var e, t, a = i * i,
h = 0,
g = j;
for (e = 0; e < g.length; e += 5) t = 0 == e ? -1.742 * i: 0,
h += (g[e + 3] + t) * Math.sin(g[e] + g[e + 1] * i + g[e + 2] * a);
return h / 100 / D
}
function g(i) {
return n(i / 365.2425 + 2e3) / 86400
}
function k(i, e) {
var t = (i - 1820) / 100;
return - 20 + e * t * t
}
function n(i) {
var e = u[u.length - 2],
t = u[u.length - 1];
if (i >= e) {
var a = 31;
if (i > e + 100) return k(i, a);
var h = k(i, a),
g = k(e, a) - t;
return h - g * (e + 100 - i) / 100
}
var n, r = u;
for (n = 0; n < r.length && !(i < r[n + 5]); n += 5);
var c = (i - r[n]) / (r[n + 5] - r[n]) * 10,
o = c * c,
f = o * c;
return r[n + 1] + r[n + 2] * c + r[n + 3] * o + r[n + 4] * f
}
function r(i, e, t, a) {
t /= 10;
var h, g, k, n, r, c, o, f = 0,
s = 1,
F = l[i],
A = 6 * e + 1,
M = F[A + 1] - F[A];
for (h = 0; 6 > h; h++, s *= t) if (n = F[A + h], r = F[A + 1 + h], o = r - n, o) {
for (0 > a ? c = r: (c = Math.floor(3 * a * o / M + .5) + n, h && (c += 3), c > r && (c = r)), g = n, k = 0; c > g; g += 3) k += F[g] * Math.cos(F[g + 1] + t * F[g + 2]);
f += k * s
}
if (f /= F[0], 0 == i) {
var u = t * t,
j = u * t;
0 == e && (f += ( - .0728 - 2.7702 * t - 1.1019 * u - .0996 * j) / D),
1 == e && (f += (0 + 4e-4 * t + 4e-4 * u - .0026 * j) / D),
2 == e && (f += ( - .002 + .0044 * t + .0213 * u - .025 * j) / 1e6)
} else {
var E = d[3 * (i - 1) + e];
0 == e && (f += -3 * t / D),
f += 2 == e ? E / 1e6: E / D
}
return f
}
function c(i, e, t) {
var a, h, g, k, n, r = M[i],
c = 0,
o = 1,
f = e * e,
s = f * e,
F = s * e,
A = F * e,
d = e - 10;
for (0 == i && (c += (3.81034409 + 8399.684730072 * e - 3319e-8 * f + 3.11e-8 * s - 2.033e-10 * F) * D, c += 5028.792262 * e + 1.1124406 * f + 7699e-8 * s - 23479e-9 * F - 1.78e-8 * A, d > 0 && (c += -.866 + 1.43 * d + .054 * d * d)), f /= 1e4, s /= 1e8, F /= 1e8, t *= 6, 0 > t && (t = r[0].length), a = 0; a < r.length; a++, o *= e) {
for (g = r[a], k = Math.floor(t * g.length / r[0].length + .5), a && (k += 6), k >= g.length && (k = g.length), h = 0, n = 0; k > h; h += 6) n += g[h] * Math.cos(g[h + 1] + e * g[h + 2] + f * g[h + 3] + s * g[h + 4] + F * g[h + 5]);
c += n * o
}
return 2 != i && (c /= D),
c
}
function o(i) {
var e = "0000000000",
t = e + e,
a = {
J: "00",
I: "000",
H: "0000",
G: "00000",
t: "01",
s: "001",
r: "0001",
q: "00001",
p: "000001",
o: "0000001",
n: "00000001",
m: "000000001",
l: "0000000001",
k: "03",
j: "0303",
i: "003",
h: "003003",
g: "0003",
f: "00003",
e: "000003",
d: "0000003",
c: "00000003",
b: "000000003",
a: "0000000003",
A: t + t + t,
B: t + t + e,
C: t + t,
D: t + e,
E: t,
F: e
};
return i.replace(/\D/g,
function(i) {
return a[i]
})
}
var f = {
digitCN: ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"],
heavenlyStems: ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"],
earthlyBranches: ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"],
chineseZodiac: ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"],
term: ["冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪"],/*代码摘取自hao123万年历, 郑晓技术博客www.zh30.com*/
monthCn: ["十一", "十二", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十"],
dateCn: ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"]
},
s = {
correction: o("EqoFscDcrFpmEsF1DfFideFelFpFfFfFiaipqti3ksttikptikqckstekqttgkqttgkqteksttikptikq1fjstgjqttjkqttgkqtekstfkptikq1tijstgjiFkirFsAeACoFsiDaDiADc3AFbBfgdfikijFifegF3FhaikgFag3E1btaieeibggiffdeigFfqDfaiBkF3kEaikhkigeidhhdiegcFfakF3ggkidbiaedksaFffckekidhhdhdikcikiakicjF3deedFhFccgicdekgiFbiaikcfi3kbFibefgEgFdcFkFeFkdcfkF3kfkcickEiFkDacFiEfbiaejcFfffkhkdgkaiei3ehigikhdFikfckF3dhhdikcfgjikhfjicjicgiehdikcikggcifgiejF3jkieFhegikggcikFegiegkfjebhigikggcikdgkaFkijcfkcikfkcifikiggkaeeigefkcdfcfkhkdgkegieidhijcFfakhfgeidieidiegikhfkfckfcjbdehdikggikgkfkicjicjF3dbidikFiggcifgiejkiegkigcdiegfggcikdbgfgefjF3kfegikggcikdgFkeeijcfkcikfkekcikdgkabhkFikaffcfkhkdgkegbiaekfkiakicjhfgqdq1fkiakgkfkhfkfcjiekgFebicggbedF3jikejbbbiakgbgkacgiejkijjgigfiakggfggcibFifjefjF3kfekdgjcibFeFkijcfkfhkfkeaieigekgbhkfikidfcjeaibgekgdkiffiffkiakF3jhbakgdki3dj3ikfkicjicjieeFkgdkicggkighdF3jfgkgfgbdkicggfggkidFkiekgijkeigfiskiggfaidheigF3jekijcikickiggkidhhdbgcfkFikikhkigeidieFikggikhkffaffijhidhhakgdkhkijF3kiakF3kfheakgdkifiggkigicjiejkieedikgdfcggkigieeiejfgkgkigbgikicggkiaideeijkefjeijikhkiggkiaidheigcikaikffikijgkiahi3hhdikgjfifaakekighie3hiaikggikhkffakicjhiahaikggikhkijF3kfejfeFhidikggiffiggkigicjiekgieeigikggiffiggkidheigkgfjkeigiegikifiggkidhedeijcfkFikikhkiggkidhh3ehigcikaffkhkiggkidhh3hhigikekfiFkFikcidhh3hitcikggikhkfkicjicghiediaikggikhkijbjfejfeFhaikggifikiggkigiejkikgkgieeigikggiffiggkigieeigekijcijikggifikiggkideedeijkefkfckikhkiggkidhh3ehijcikaffkhkiggkidhh3hhigikhkikFikfckcidhh3hiaikgjikhfjicjicgiehdikcikggifikigiejfejkieFhegikggifikiggfghigkfjeijkhigikggifikiggkigieeijcijcikfksikifikiggkidehdeijcfdckikhkiggkhghh3ehijikifffffkhsFngErD3pAfBoDd3BlEtFqA1AqoEpDqElAEsEeB1BmADlDkqBtC3FnEpDqnEmFsFsAFnllBbFmDsDiCtDmAB1BmtCgpEplCpAEiBiEoFqFtEqsDcCnFtADnFlEgdkEgmEtEsCtDmADqFtAFrAtEcCqAE3BoFqC3F3DrFtBmFtAC1ACnFaoCgADcADcCcFfoFtDlAFgmFqBq1bpEoAEmkqnEeCtAE3bAEqgDfFfCrgEcBrACfAAABqAAB3AAClEnFeCtCgAADqDoBmtAAACbFiAAADsEtBqAB1FsDqpFqEmFsCeDtFlCeDtoEpClEqAAFrAFoCgFmFsFqEnAEcCqFeCtFtEnAEeFtAAEkFnErAABbFkADnAAeCtFeAfBoAEpFtAABtFqAApDcCGJ"),
calcForLow: function(i) {
var e = 7771.37714500204,
t = (i + 1.08472) / e;
return t -= ( - 331e-7 * t * t + .10976 * Math.cos(.785 + 8328.6914 * t) + .02224 * Math.cos(.187 + 7214.0629 * t) - .03342 * Math.cos(4.669 + 628.3076 * t)) / e + (32 * (t + 1.8) * (t + 1.8) - 20) / 86400 / 36525,
36525 * t + 8 / 24
},
calcForHigh: function(i) {
var e = 36525 * E.MS_aLon_t2(i);
e = e - g(e) + 8 / 24;
var t = (e + .5) % 1 * 86400;
return (1800 > t || t > 84600) && (e = 36525 * E.MS_aLon_t(i) - g(e) + 8 / 24),
e
},
cache: {},
getNewMoons: function(i) {
var e = i[0].JD,
t = s.calc(e),
a = [];
if (t > e && (t -= 29.53), s.cache[t]) a = s.cache[t];
else {
for (var h = 0; 15 > h; h++) a.push({
JD: s.calc(t + 29.5306 * h),
index: h
}),
h && (a[h - 1].days = a[h].JD - a[h - 1].JD);
if (a[13].JD <= i[24].JD) {
for (h = 1; a[h + 1].JD > i[2 * h].JD && 13 > h; h++);
for (a[h].isLeap = !0; 14 > h; h++) a[h].index--
}
for (h = 0; 14 > h; h++) a[h].name = (a[h].isLeap ? "闰": "") + f.monthCn[a[h].index % 12],
a[h].nextName = (a[h + 1].isLeap ? "闰": "") + f.monthCn[a[h + 1].index % 12],
2 == a[h].index && (a.zyIndex = h);
s.cache[t] = a
}
return a
},
calc: function(i) {
i += A.JD2000;
var e, t, a = 14,
h = 1947168,
g = 2436935;
return i >= g ? Math.floor(this.calcForHigh(Math.floor((i + a - 2451551) / 29.5306) * Math.PI * 2) + .5) : i >= h && g > i ? (e = Math.floor(this.calcForLow(Math.floor((i + a - 2451551) / 29.5306) * Math.PI * 2) + .5), t = this.correction.substr(Math.floor((i - h) / 29.5306), 1) - 0, e + (t ? t - 2 : t)) : void 0
}
},
F = {
correction: o("FrcFs11AFsckF1tsDtFqEtF3posFdFgiFseFtmelpsEfhkF1anmelpFlF3ikrotcnEqEq1FfqmcDsrFor11FgFrcgDscFs11FgEeFtE1sfFs11sCoEsaF1tsD3FpeE1eFsssEciFsFnmelpFcFhkF1tcnEqEpFgkrotcnEqrEtFermcDsrE111FgBmcmr11DaEfnaF111sD3FpeForeF1tssEfiFpEoeFssD3iFstEqFppDgFstcnEqEpFg33FscnEqrAoAF1ClAEsDmDtCtBaDlAFbAEpAAAAAD1FgBiBqoBbnBaBoAAAAAAAEgDqAdBqAFrBaBoACdAAf3AACgAAAeBbCamDgEifAE1AABa3C3BgFdiAAACoCeE3ADiEifDaAEqAAFe3AcFbcAAAAAF3iFaAAACpACmFmAAAAAAAACrDaAAADG0"),
calcForLow: function(i) {
/*代码摘取自hao123万年历, 郑晓技术博客www.zh30.com*/"0": "") + i
}
var e = {
"正月初一": "t,春节 ",
"正月十五": "t,元宵节",
"二月初二": "t,龙头节",
"五月初五": "t,端午节",
"七月初七": "t,乞巧节",
"七月十五": "t,中元节",
"八月十五": "t,中秋节",
"九月初九": "t,重阳节",
"十月初一": "t,寒衣节",
"十月十五": "t,下元节",
"腊月初八": "t,腊八节",
"腊月廿三": "t,祭灶节",
"0202": "i,世界湿地日,1996",
"0308": "i,国际妇女节,1975",
"0315": "i,国际消费者权益日,1983",
"0422": "i,世界地球日,1990",
"0501": "i,国际劳动节,1889",
"0512": "i,国际护士节,1912",
"0518": "i,国际博物馆日,1977",
"0605": "i,世界环境日,1972",
"0623": "i,国际奥林匹克日,1948",
"0624": "i,世界骨质疏松日,1997",
1117 : "i,世界学生日,1942",
1201 : "i,世界艾滋病日,1988",
"0101": "h,元旦",
"0312": "h,植树节,1979",
"0504": "h,五四青年节,1939",
"0601": "h,儿童节,1950",
"0701": "h,建党节,1941",
"0801": "h,建军节,1933",
"0910": "h,教师节,1985",
1001 : "h,国庆节,1949",
1224 : "c,平安夜",
1225 : "c,圣诞节",
"0214": "a,西洋情人节",
w: {
"0520": "i,母亲节,1913",
"0630": "a,父亲节",
1144 : "a,感恩节(美国)",
1021 : "a,感恩节(加拿大)"
}
};
Lunar.prototype.festival = function() {
var t = this.oDate.getFullYear(),
a = this.oDate.getMonth() + 1,
h = this.oDate.getDate(),
g = i(a) + i(h),
k = this.oDate.getDay(),
n = Math.ceil(h / 7),
r = i(a) + n + k,
c = this.lMonth,
o = this.lDate,
f = c + "月" + o,
s = [];
"正" == this.lNextMonth && o == (this.isBigMonth ? "三十": "廿九") && s.push("t,除夕"),
e.w[r] && (s = s.concat(e.w[r].split("|"))),
e[g] && (s = s.concat(e[g].split("|"))),
e[f] && (s = s.concat(e[f].split("|")));
for (var F, A = s.length - 1; A > -1; A--) F = s[A].split(","),
F[2] && t < F[2] - 0 ? s.splice(A, 1) : s[A] = {
type: F[0],
desc: F[1]
};
return s.sort(function(i, e) {
return e.type.charCodeAt(0) - i.type.charCodeAt(0)
})
}
}();
function i(i) {
var t = new Date(i);
return - 0x94e9b950e00 > +t ? null: new e(t)
}
function e(i) {
this.oDate = i,
this.julianDay = A.fromDate(this.oDate),
this.cnDay = this.oDate.getDay() ? f.digitCN[this.oDate.getDay()] : "日";
for (var e, t = this.julianDay - A.JD2000,
a = F.getTerms(t), h = s.getNewMoons(a), g = Math.round(t - h[0].JD), k = 0; k < h.length; k++) {
if (e = h[k], g < e.days) {
this.isBigMonth = 30 == e.days,
this.isLeap = e.isLeap,
this.lMonth = e.name,
this.lNextMonth = e.nextName,
this.lDate = f.dateCn[g],
this.dateIndex = g;
break
}
g -= e.days
}
t = Math.round(t),
this.lYear = Math.floor((a[3].JD + (t < a[3].JD ? -365 : 0) + 5844 - 35) / 365.2422 + .5);
var n = h[h.zyIndex].JD;
n -= n > t ? 365 : 0,
n += 5810,
this.sYear = Math.floor(n / 365.2422 + .5),
this.hYear = this.sYear + 1984 + 2698;
var n = a.hash[t];
this.term = n ? n.name: "";
var n = this.lYear + 6e3;
this.animal = f.chineseZodiac[n % 12],
this.gzYear = f.heavenlyStems[n % 10] + f.earthlyBranches[n % 12];
var n = Math.floor((t - a[0].JD) / 30.43685);
12 > n && t >= a[2 * n + 1].JD && n++,
n += 12 * Math.floor((a[12].JD + 390) / 365.2422) + 9e5,
this.gzMonth = f.heavenlyStems[n % 10] + f.earthlyBranches[n % 12];
var n = t - 6 + 9e6;
this.gzDate = f.heavenlyStems[n % 10] + f.earthlyBranches[n % 12],
this.gzChrono = f.earthlyBranches[Math.floor((this.oDate.getHours() + 1) / 2)] || "子"
}
function t(i) {
var e = -.043126 + 628.301955 * i - 2732e-9 * i * i,
t = .016708634 - 42037e-9 * i - 1.267e-7 * i * i;
return - 20.49552 * (1 + t * Math.cos(e)) / D
}
function a() {
return - 34e-7
}
function h(i) {
var e, t, a = i * i,
h = 0,
g = j;
for (e = 0; e < g.length; e += 5) t = 0 == e ? -1.742 * i: 0,
h += (g[e + 3] + t) * Math.sin(g[e] + g[e + 1] * i + g[e + 2] * a);
return h / 100 / D
}
function g(i) {
return n(i / 365.2425 + 2e3) / 86400
}
function k(i, e) {
var t = (i - 1820) / 100;
return - 20 + e * t * t
}
function n(i) {
var e = u[u.length - 2],
t = u[u.length - 1];
if (i >= e) {
var a = 31;
if (i > e + 100) return k(i, a);
var h = k(i, a),
g = k(e, a) - t;
return h - g * (e + 100 - i) / 100
}
var n, r = u;
for (n = 0; n < r.length && !(i < r[n + 5]); n += 5);
var c = (i - r[n]) / (r[n + 5] - r[n]) * 10,
o = c * c,
f = o * c;
return r[n + 1] + r[n + 2] * c + r[n + 3] * o + r[n + 4] * f
}
function r(i, e, t, a) {
t /= 10;
var h, g, k, n, r, c, o, f = 0,
s = 1,
F = l[i],
A = 6 * e + 1,
M = F[A + 1] - F[A];
for (h = 0; 6 > h; h++, s *= t) if (n = F[A + h], r = F[A + 1 + h], o = r - n, o) {
for (0 > a ? c = r: (c = Math.floor(3 * a * o / M + .5) + n, h && (c += 3), c > r && (c = r)), g = n, k = 0; c > g; g += 3) k += F[g] * Math.cos(F[g + 1] + t * F[g + 2]);
f += k * s
}
if (f /= F[0], 0 == i) {
var u = t * t,
j = u * t;
0 == e && (f += ( - .0728 - 2.7702 * t - 1.1019 * u - .0996 * j) / D),
1 == e && (f += (0 + 4e-4 * t + 4e-4 * u - .0026 * j) / D),
2 == e && (f += ( - .002 + .0044 * t + .0213 * u - .025 * j) / 1e6)
} else {
var E = d[3 * (i - 1) + e];
0 == e && (f += -3 * t / D),
f += 2 == e ? E / 1e6: E / D
}
return f
}
function c(i, e, t) {
var a, h, g, k, n, r = M[i],
c = 0,
o = 1,
f = e * e,
s = f * e,
F = s * e,
A = F * e,
d = e - 10;
for (0 == i && (c += (3.81034409 + 8399.684730072 * e - 3319e-8 * f + 3.11e-8 * s - 2.033e-10 * F) * D, c += 5028.792262 * e + 1.1124406 * f + 7699e-8 * s - 23479e-9 * F - 1.78e-8 * A, d > 0 && (c += -.866 + 1.43 * d + .054 * d * d)), f /= 1e4, s /= 1e8, F /= 1e8, t *= 6, 0 > t && (t = r[0].length), a = 0; a < r.length; a++, o *= e) {
for (g = r[a], k = Math.floor(t * g.length / r[0].length + .5), a && (k += 6), k >= g.length && (k = g.length), h = 0, n = 0; k > h; h += 6) n += g[h] * Math.cos(g[h + 1] + e * g[h + 2] + f * g[h + 3] + s * g[h + 4] + F * g[h + 5]);
c += n * o
}
return 2 != i && (c /= D),
c
}
function o(i) {
var e = "0000000000",
t = e + e,
a = {
J: "00",
I: "000",
H: "0000",
G: "00000",
t: "01",
s: "001",
r: "0001",
q: "00001",
p: "000001",
o: "0000001",
n: "00000001",
m: "000000001",
l: "0000000001",
k: "03",
j: "0303",
i: "003",
h: "003003",
g: "0003",
f: "00003",
e: "000003",
d: "0000003",
c: "00000003",
b: "000000003",
a: "0000000003",
A: t + t + t,
B: t + t + e,
C: t + t,
D: t + e,
E: t,
F: e
};
return i.replace(/\D/g,
function(i) {
return a[i]
})
}
var f = {
digitCN: ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"],
heavenlyStems: ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"],
earthlyBranches: ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"],
chineseZodiac: ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"],
term: ["冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪"],/*代码摘取自hao123万年历, 郑晓技术博客www.zh30.com*/
monthCn: ["十一", "十二", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十"],
dateCn: ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"]
},
s = {
correction: o("EqoFscDcrFpmEsF1DfFideFelFpFfFfFiaipqti3ksttikptikqckstekqttgkqttgkqteksttikptikq1fjstgjqttjkqttgkqtekstfkptikq1tijstgjiFkirFsAeACoFsiDaDiADc3AFbBfgdfikijFifegF3FhaikgFag3E1btaieeibggiffdeigFfqDfaiBkF3kEaikhkigeidhhdiegcFfakF3ggkidbiaedksaFffckekidhhdhdikcikiakicjF3deedFhFccgicdekgiFbiaikcfi3kbFibefgEgFdcFkFeFkdcfkF3kfkcickEiFkDacFiEfbiaejcFfffkhkdgkaiei3ehigikhdFikfckF3dhhdikcfgjikhfjicjicgiehdikcikggcifgiejF3jkieFhegikggcikFegiegkfjebhigikggcikdgkaFkijcfkcikfkcifikiggkaeeigefkcdfcfkhkdgkegieidhijcFfakhfgeidieidiegikhfkfckfcjbdehdikggikgkfkicjicjF3dbidikFiggcifgiejkiegkigcdiegfggcikdbgfgefjF3kfegikggcikdgFkeeijcfkcikfkekcikdgkabhkFikaffcfkhkdgkegbiaekfkiakicjhfgqdq1fkiakgkfkhfkfcjiekgFebicggbedF3jikejbbbiakgbgkacgiejkijjgigfiakggfggcibFifjefjF3kfekdgjcibFeFkijcfkfhkfkeaieigekgbhkfikidfcjeaibgekgdkiffiffkiakF3jhbakgdki3dj3ikfkicjicjieeFkgdkicggkighdF3jfgkgfgbdkicggfggkidFkiekgijkeigfiskiggfaidheigF3jekijcikickiggkidhhdbgcfkFikikhkigeidieFikggikhkffaffijhidhhakgdkhkijF3kiakF3kfheakgdkifiggkigicjiejkieedikgdfcggkigieeiejfgkgkigbgikicggkiaideeijkefjeijikhkiggkiaidheigcikaikffikijgkiahi3hhdikgjfifaakekighie3hiaikggikhkffakicjhiahaikggikhkijF3kfejfeFhidikggiffiggkigicjiekgieeigikggiffiggkidheigkgfjkeigiegikifiggkidhedeijcfkFikikhkiggkidhh3ehigcikaffkhkiggkidhh3hhigikekfiFkFikcidhh3hitcikggikhkfkicjicghiediaikggikhkijbjfejfeFhaikggifikiggkigiejkikgkgieeigikggiffiggkigieeigekijcijikggifikiggkideedeijkefkfckikhkiggkidhh3ehijcikaffkhkiggkidhh3hhigikhkikFikfckcidhh3hiaikgjikhfjicjicgiehdikcikggifikigiejfejkieFhegikggifikiggfghigkfjeijkhigikggifikiggkigieeijcijcikfksikifikiggkidehdeijcfdckikhkiggkhghh3ehijikifffffkhsFngErD3pAfBoDd3BlEtFqA1AqoEpDqElAEsEeB1BmADlDkqBtC3FnEpDqnEmFsFsAFnllBbFmDsDiCtDmAB1BmtCgpEplCpAEiBiEoFqFtEqsDcCnFtADnFlEgdkEgmEtEsCtDmADqFtAFrAtEcCqAE3BoFqC3F3DrFtBmFtAC1ACnFaoCgADcADcCcFfoFtDlAFgmFqBq1bpEoAEmkqnEeCtAE3bAEqgDfFfCrgEcBrACfAAABqAAB3AAClEnFeCtCgAADqDoBmtAAACbFiAAADsEtBqAB1FsDqpFqEmFsCeDtFlCeDtoEpClEqAAFrAFoCgFmFsFqEnAEcCqFeCtFtEnAEeFtAAEkFnErAABbFkADnAAeCtFeAfBoAEpFtAABtFqAApDcCGJ"),
calcForLow: function(i) {
var e = 7771.37714500204,
t = (i + 1.08472) / e;
return t -= ( - 331e-7 * t * t + .10976 * Math.cos(.785 + 8328.6914 * t) + .02224 * Math.cos(.187 + 7214.0629 * t) - .03342 * Math.cos(4.669 + 628.3076 * t)) / e + (32 * (t + 1.8) * (t + 1.8) - 20) / 86400 / 36525,
36525 * t + 8 / 24
},
calcForHigh: function(i) {
var e = 36525 * E.MS_aLon_t2(i);
e = e - g(e) + 8 / 24;
var t = (e + .5) % 1 * 86400;
return (1800 > t || t > 84600) && (e = 36525 * E.MS_aLon_t(i) - g(e) + 8 / 24),
e
},
cache: {},
getNewMoons: function(i) {
var e = i[0].JD,
t = s.calc(e),
a = [];
if (t > e && (t -= 29.53), s.cache[t]) a = s.cache[t];
else {
for (var h = 0; 15 > h; h++) a.push({
JD: s.calc(t + 29.5306 * h),
index: h
}),
h && (a[h - 1].days = a[h].JD - a[h - 1].JD);
if (a[13].JD <= i[24].JD) {
for (h = 1; a[h + 1].JD > i[2 * h].JD && 13 > h; h++);
for (a[h].isLeap = !0; 14 > h; h++) a[h].index--
}
for (h = 0; 14 > h; h++) a[h].name = (a[h].isLeap ? "闰": "") + f.monthCn[a[h].index % 12],
a[h].nextName = (a[h + 1].isLeap ? "闰": "") + f.monthCn[a[h + 1].index % 12],
2 == a[h].index && (a.zyIndex = h);
s.cache[t] = a
}
return a
},
calc: function(i) {
i += A.JD2000;
var e, t, a = 14,
h = 1947168,
g = 2436935;
return i >= g ? Math.floor(this.calcForHigh(Math.floor((i + a - 2451551) / 29.5306) * Math.PI * 2) + .5) : i >= h && g > i ? (e = Math.floor(this.calcForLow(Math.floor((i + a - 2451551) / 29.5306) * Math.PI * 2) + .5), t = this.correction.substr(Math.floor((i - h) / 29.5306), 1) - 0, e + (t ? t - 2 : t)) : void 0
}
},
F = {
correction: o("FrcFs11AFsckF1tsDtFqEtF3posFdFgiFseFtmelpsEfhkF1anmelpFlF3ikrotcnEqEq1FfqmcDsrFor11FgFrcgDscFs11FgEeFtE1sfFs11sCoEsaF1tsD3FpeE1eFsssEciFsFnmelpFcFhkF1tcnEqEpFgkrotcnEqrEtFermcDsrE111FgBmcmr11DaEfnaF111sD3FpeForeF1tssEfiFpEoeFssD3iFstEqFppDgFstcnEqEpFg33FscnEqrAoAF1ClAEsDmDtCtBaDlAFbAEpAAAAAD1FgBiBqoBbnBaBoAAAAAAAEgDqAdBqAFrBaBoACdAAf3AACgAAAeBbCamDgEifAE1AABa3C3BgFdiAAACoCeE3ADiEifDaAEqAAFe3AcFbcAAAAAF3iFaAAACpACmFmAAAAAAAACrDaAAADG0"),
calcForLow: function(i) {
/*代码摘取自hao123万年历, 郑晓技术博客www.zh30.com*/"0": "") + i
}
var e = {
"正月初一": "t,春节 ",
"正月十五": "t,元宵节",
"二月初二": "t,龙头节",
"五月初五": "t,端午节",
"七月初七": "t,乞巧节",
"七月十五": "t,中元节",
"八月十五": "t,中秋节",
"九月初九": "t,重阳节",
"十月初一": "t,寒衣节",
"十月十五": "t,下元节",
"腊月初八": "t,腊八节",
"腊月廿三": "t,祭灶节",
"0202": "i,世界湿地日,1996",
"0308": "i,国际妇女节,1975",
"0315": "i,国际消费者权益日,1983",
"0422": "i,世界地球日,1990",
"0501": "i,国际劳动节,1889",
"0512": "i,国际护士节,1912",
"0518": "i,国际博物馆日,1977",
"0605": "i,世界环境日,1972",
"0623": "i,国际奥林匹克日,1948",
"0624": "i,世界骨质疏松日,1997",
1117 : "i,世界学生日,1942",
1201 : "i,世界艾滋病日,1988",
"0101": "h,元旦",
"0312": "h,植树节,1979",
"0504": "h,五四青年节,1939",
"0601": "h,儿童节,1950",
"0701": "h,建党节,1941",
"0801": "h,建军节,1933",
"0910": "h,教师节,1985",
1001 : "h,国庆节,1949",
1224 : "c,平安夜",
1225 : "c,圣诞节",
"0214": "a,西洋情人节",
w: {
"0520": "i,母亲节,1913",
"0630": "a,父亲节",
1144 : "a,感恩节(美国)",
1021 : "a,感恩节(加拿大)"
}
};
Lunar.prototype.festival = function() {
var t = this.oDate.getFullYear(),
a = this.oDate.getMonth() + 1,
h = this.oDate.getDate(),
g = i(a) + i(h),
k = this.oDate.getDay(),
n = Math.ceil(h / 7),
r = i(a) + n + k,
c = this.lMonth,
o = this.lDate,
f = c + "月" + o,
s = [];
"正" == this.lNextMonth && o == (this.isBigMonth ? "三十": "廿九") && s.push("t,除夕"),
e.w[r] && (s = s.concat(e.w[r].split("|"))),
e[g] && (s = s.concat(e[g].split("|"))),
e[f] && (s = s.concat(e[f].split("|")));
for (var F, A = s.length - 1; A > -1; A--) F = s[A].split(","),
F[2] && t < F[2] - 0 ? s.splice(A, 1) : s[A] = {
type: F[0],
desc: F[1]
};
return s.sort(function(i, e) {
return e.type.charCodeAt(0) - i.type.charCodeAt(0)
})
}
}();
调用方法也很简单,以上代码运行后将e和i赋值给了window.Lunar和window.lunar。调用时使用lunar()方法即可,参数传入一个Date对象。
//调用
var l = lunar(new Date(1475280000000)); //2016.10.10 8:00:00 毫秒
//其中有如下属性
console.log(l.animal); //生肖,如"猴"
console.log(l.cnDay); //星期几(中文),如"六"
console.log(l.dateIndex); //当天在本月中的索引(第1天是0),如"0"
console.log(l.gzChrono); //当前时辰,如"辰"
console.log(l.gzMonth); //日的干支表示,如"丁酉"
console.log(l.gzYear); //月的干支表示,如"丙申"
console.log(l.hYear); //当年年份+2698 没具体看过程不清楚作用,如"4714"
console.log(l.isBigMonth); //是否是大月份(30),如"true"
console.log(l.julianDay); //儒略日,如"2457662.8333333335"
console.log(l.isLeap); //是否是闰月,如"true",这里的示例非闫月,是undefined
console.log(l.lDate); //农历日,如"初一"
console.log(l.lMonth); //农历月,如"九"
console.log(l.lNextMonth); //农历下月,如"十"
console.log(l.lYear); //生肖轮循 1984年至今的年数,如"32"
console.log(l.sYear); //同上,如"32"
console.log(l.term); //节气,如"霜降",这里的示例没有,为空
console.log(l.oDate); //当前的Date对象
console.log(l.festival()[0].desc); //当天的节日信息(如果有),如"国庆节"
var l = lunar(new Date(1475280000000)); //2016.10.10 8:00:00 毫秒
//其中有如下属性
console.log(l.animal); //生肖,如"猴"
console.log(l.cnDay); //星期几(中文),如"六"
console.log(l.dateIndex); //当天在本月中的索引(第1天是0),如"0"
console.log(l.gzChrono); //当前时辰,如"辰"
console.log(l.gzMonth); //日的干支表示,如"丁酉"
console.log(l.gzYear); //月的干支表示,如"丙申"
console.log(l.hYear); //当年年份+2698 没具体看过程不清楚作用,如"4714"
console.log(l.isBigMonth); //是否是大月份(30),如"true"
console.log(l.julianDay); //儒略日,如"2457662.8333333335"
console.log(l.isLeap); //是否是闰月,如"true",这里的示例非闫月,是undefined
console.log(l.lDate); //农历日,如"初一"
console.log(l.lMonth); //农历月,如"九"
console.log(l.lNextMonth); //农历下月,如"十"
console.log(l.lYear); //生肖轮循 1984年至今的年数,如"32"
console.log(l.sYear); //同上,如"32"
console.log(l.term); //节气,如"霜降",这里的示例没有,为空
console.log(l.oDate); //当前的Date对象
console.log(l.festival()[0].desc); //当天的节日信息(如果有),如"国庆节"
本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。
本文永久链接: https://www.zh30.com/hao123-calendar-js.html
hao123万年历中的农历显示源码:目前有13 条留言
亲,如何在hao123的万年历页面,找到lunar.js ? 我找了好久也没找到这个程序。。。是F12看资源吧?辛苦了我是真没找到。。。
没有这个lunar.js。
确实没有。。。我用的fullcalendar写个日历,最新版本的,网上找的代码实现的基本都是之前老版本的。hao123现在也是用的365日历的东西,抓完了。。。表示比较看不懂。。。再读读代码吧,明显是代码阅读理解能力比较弱
这个屌
学习带来乐趣,谢谢博主!
路过~混个脸熟。
很厉害!!
alert(‘我试试’);
来看看,学习学习!!
网站看起来特别舒服!
很喜欢你网站的排版,让人感觉舒服。
向您学习,我的QQ:905859933!多多指教!
丙申年(猴)九月初八 2016-10-8
你的留言被系统过滤掉了…