/** * System Date Skill * 获取当前日期和农历(使用 lunar-javascript 库) */ const { Solar, Lunar } = require('lunar-javascript'); /** * 获取北京时间 */ function getBeijingTime() { const now = new Date(); // UTC + 8 = 北京时间 return new Date(now.getTime() + (8 * 60 * 60 * 1000)); } /** * 获取农历日期(使用专业库) */ function getLunarInfo(beijingDate) { // 从公历转换为农历 const solar = Solar.fromDate(beijingDate); const lunar = solar.getLunar(); return { lunarDate: lunar.toString(), // 如:二〇二六年正月初八 lunarDay: lunar.getDayInChinese(), // 如:初八 lunarMonth: lunar.getMonthInChinese(), // 如:正月 lunarYear: lunar.getYearInChinese(), // 如:二〇二六 isLeap: false // lunar-javascript 需要其他方法判断闰月 }; } /** * 获取当前日期时间(北京时间) */ function getCurrentDateTime() { const beijingNow = getBeijingTime(); const year = beijingNow.getFullYear(); const month = beijingNow.getMonth() + 1; const day = beijingNow.getDate(); const weekdays = ['日', '一', '二', '三', '四', '五', '六']; const weekday = `星期${weekdays[beijingNow.getDay()]}`; const lunarInfo = getLunarInfo(beijingNow); return { success: true, timezone: 'Asia/Shanghai', year: year, month: month, day: day, weekday: weekday, fullDate: `${year}年${month}月${day}日`, lunarDate: lunarInfo.lunarDate, lunarDay: lunarInfo.lunarDay, lunarMonth: lunarInfo.lunarMonth, lunarYear: lunarInfo.lunarYear, isLeap: lunarInfo.isLeap, isoString: beijingNow.toISOString() }; } /** * 获取相对日期(北京时间) */ function getRelativeDate(relative = 'today') { const beijingNow = getBeijingTime(); let targetDate = new Date(beijingNow); switch (relative.toLowerCase()) { case 'today': case '今天': break; case 'tomorrow': case '明天': targetDate.setDate(targetDate.getDate() + 1); break; case 'yesterday': case '昨天': targetDate.setDate(targetDate.getDate() - 1); break; } const year = targetDate.getFullYear(); const month = targetDate.getMonth() + 1; const day = targetDate.getDate(); const weekdays = ['日', '一', '二', '三', '四', '五', '六']; const weekday = `星期${weekdays[targetDate.getDay()]}`; const lunarInfo = getLunarInfo(targetDate); return { success: true, relative: relative, year: year, month: month, day: day, weekday: weekday, fullDate: `${year}年${month}月${day}日`, lunarDate: lunarInfo.lunarDate, lunarDay: lunarInfo.lunarDay, lunarMonth: lunarInfo.lunarMonth, lunarYear: lunarInfo.lunarYear, isLeap: lunarInfo.isLeap, timezone: 'Asia/Shanghai' }; } /** * 格式化日期为可读文本 */ function formatDateInfo(dateInfo, includeLunar = true) { const lines = [ `📅 **${dateInfo.fullDate}**`, `**星期:** ${dateInfo.weekday}`, ]; if (includeLunar && dateInfo.lunarDate) { lines.push(`**农历:** ${dateInfo.lunarDate}`); if (dateInfo.isLeap) { lines.push(`**闰月:** 是`); } } lines.push(`**时区:** ${dateInfo.timezone || 'Asia/Shanghai'}`); return lines.join('\n'); } // 命令行测试 if (require.main === module) { console.log('=== 农历计算测试(使用 lunar-javascript 库)===\n'); const arg = process.argv[2] || 'today'; const result = getRelativeDate(arg); console.log(formatDateInfo(result)); console.log('\n详细信息:'); console.log(`农历年:${result.lunarYear}`); console.log(`农历月:${result.lunarMonth}`); console.log(`农历日:${result.lunarDay}`); console.log(`是否闰月:${result.isLeap ? '是' : '否'}`); } module.exports = { getCurrentDateTime, getRelativeDate, formatDateInfo, getLunarInfo, getBeijingTime };