Zum Hauptinhalt springen
claw
am
tools
Werkzeuge
Dokumente
Daoark
EN
Startseite
Startseite
/
Zeit & Datum
›
0x8) { if ((info & i) !== 0) sum += 1; i >>= 1; } return sum + leapDays(y); } // 闰月天数 function leapDays(y) { if (leapMonth(y) !== 0) { return (LUNAR_INFO[y - 1900] & 0x10000) !== 0 ? 30 : 29; } return 0; } // 闰月月份(0=无闰月) function leapMonth(y) { return LUNAR_INFO[y - 1900] & 0xf; } // 农历月天数 function monthDays(y, m) { return (LUNAR_INFO[y - 1900] & (0x10000 >> m)) !== 0 ? 30 : 29; } // 公历转农历 (返回 {year, month, day, isLeap}) function solar2Lunar(y, m, d) { if (y < 1900 || y > 2100) return null; var baseDate = new Date(1900, 0, 31); // 1900年1月31日为农历1900年正月初一 var objDate = new Date(y, m - 1, d); var offset = Math.floor((objDate - baseDate) / 86400000); var i, temp = 0; for (i = 1900; i < 2101 && offset > 0; i++) { temp = lunarYearDays(i); offset -= temp; } if (offset < 0) { offset += temp; i--; } var lunarYear = i; var leap = leapMonth(i); var isLeap = false; for (i = 1; i < 13 && offset > 0; i++) { if (leap > 0 && i === (leap + 1) && !isLeap) { --i; isLeap = true; temp = leapDays(lunarYear); } else { temp = monthDays(lunarYear, i); } if (isLeap && i === (leap + 1)) isLeap = false; offset -= temp; } if (offset === 0 && leap > 0 && i === (leap + 1)) { if (isLeap) { isLeap = false; } else { isLeap = true; --i; } } if (offset < 0) { offset += temp; --i; } var lunarMonth = i; var lunarDay = offset + 1; return {year: lunarYear, month: lunarMonth, day: lunarDay, isLeap: isLeap}; } function lunarDayCN(d) { if (d === 10) return '初十'; if (d === 20) return '二十'; if (d === 30) return '三十'; if (d < 11) return LUNAR_DAYS[0] + LUNAR_DAY_UNITS[d]; if (d < 20) return '十' + LUNAR_DAY_UNITS[d - 10]; if (d < 30) return LUNAR_DAY_UNITS[Math.floor(d / 10)] + '十' + (d % 10 !== 0 ? LUNAR_DAY_UNITS[d % 10] : ''); return ''; } var errorMsg = document.getElementById('error-msg'); var resultArea = document.getElementById('result-area'); var btnMain = document.getElementById('btn-main'); document.getElementById('f').addEventListener('submit', function(e) { e.preventDefault(); errorMsg.textContent = ''; btnMain.disabled = true; try { var dateStr = document.getElementById('date').value; if (!dateStr) { errorMsg.textContent = '请选择日期'; return; } var parts = dateStr.split('-'); var y = parseInt(parts[0]), m = parseInt(parts[1]), d = parseInt(parts[2]); if (y < 1900 || y > 2100) { errorMsg.textContent = '请输入 1900-2100 范围日期'; return; } var dt = new Date(y, m - 1, d); var weekday = WEEKDAYS[dt.getDay()]; var lunar = solar2Lunar(y, m, d); if (!lunar) { errorMsg.textContent = '日期超出范围'; return; } var lunarMonthCN = (lunar.isLeap ? '闰' : '') + LUNAR_MONTHS[lunar.month - 1] + '月'; var stemIdx = (lunar.year - 4) % 10; var branchIdx = (lunar.year - 4) % 12; var ganzhi = HEAVENLY_STEMS[stemIdx] + EARTHLY_BRANCHES[branchIdx]; var zodiac = ZODIAC[branchIdx]; resultArea.classList.add('show'); document.getElementById('result-meta').textContent = '公历 ' + dateStr; var html = '
' + '
公历
' + y + '年' + m + '月' + d + '日
' + weekday + '
' + '
农历
' + lunar.year + '年 ' + lunarMonthCN + '
' + lunarDayCN(lunar.day) + '
' + '
干支
' + ganzhi + '年
' + (lunar.isLeap ? '闰' : '') + lunarMonthCN + '
' + '
生肖
属' + zodiac + '
12 年一轮
' + '
'; document.getElementById('result-content').innerHTML = html; } catch (err) { errorMsg.textContent = '错误: ' + err.message; } finally { btnMain.disabled = false; } }); document.getElementById('btn-today').addEventListener('click', function() { var now = new Date(); var y = now.getFullYear(); var m = String(now.getMonth() + 1).padStart(2, '0'); var d = String(now.getDate()).padStart(2, '0'); document.getElementById('date').value = y + '-' + m + '-' + d; document.getElementById('f').dispatchEvent(new Event('submit', {bubbles: true, cancelable: true})); }); // 默认填今天 document.getElementById('btn-today').click(); })();