Lunar.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. function t(t, r) {
  2. return (t >> r) & 1;
  3. }
  4. module.exports = {
  5. getLunar: function () {
  6. var r;
  7. var a;
  8. var e;
  9. var o;
  10. var h = [268949, 3402, 3493, 133973, 1386, 464219, 605, 2349, 334123, 2709, 2890, 267946, 2773, 592565, 1210, 2651, 395863, 1323, 2707, 265877];
  11. var c = new Date();
  12. var f = false;
  13. var u = c.getYear();
  14. if (u < 1900) {
  15. u += 1900;
  16. }
  17. var g = 365 * (u - 2001) + Math.floor((u - 2001) / 4) + [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][c.getMonth()] + c.getDate() - 23;
  18. for (c.getYear() % 4 == 0 && c.getMonth() > 1 && g++, m = 0; ; m++) {
  19. for (k = h[m] < 4095 ? 11 : 12, n = k; n >= 0; n--) {
  20. if (g <= 29 + t(h[m], n)) {
  21. f = true;
  22. break;
  23. }
  24. g = g - 29 - t(h[m], n);
  25. }
  26. if (f) {
  27. break;
  28. }
  29. }
  30. r = 2001 + m;
  31. a = k - n + 1;
  32. e = g;
  33. if (12 == k) {
  34. if (a == Math.floor(h[m] / 65536) + 1) {
  35. a = 1 - a;
  36. }
  37. if (a > Math.floor(h[m] / 65536) + 1) {
  38. a--;
  39. }
  40. }
  41. o = Math.floor((c.getHours() + 3) / 2);
  42. u = '';
  43. u += '甲乙丙丁戊己庚辛壬癸'.charAt((r - 4) % 10);
  44. u += '子丑寅卯辰巳午未申酉戌亥'.charAt((r - 4) % 12);
  45. u += '年(';
  46. u += '鼠牛虎兔龙蛇马羊猴鸡狗猪'.charAt((r - 4) % 12);
  47. u += ') ';
  48. a < 1 ? ((u += '闰'), (u += '正二三四五六七八九十冬腊'.charAt(-a - 1))) : (u += '正二三四五六七八九十冬腊'.charAt(a - 1));
  49. u += '月';
  50. u += e < 11 ? '初' : e < 20 ? '十' : e < 30 ? '廿' : '卅';
  51. (e % 10 == 0 && 10 != e) || (u += '一二三四五六七八九十'.charAt((e - 1) % 10));
  52. u += ' ';
  53. if (13 == o) {
  54. u += '夜';
  55. }
  56. u += '子丑寅卯辰巳午未申酉戌亥'.charAt((o - 1) % 12);
  57. return (u += '时');
  58. }
  59. };