{"id":29343,"date":"2025-11-19T14:20:29","date_gmt":"2025-11-19T14:20:29","guid":{"rendered":"https:\/\/fortunetellingpro.com\/?page_id=29343"},"modified":"2025-11-23T06:54:44","modified_gmt":"2025-11-23T06:54:44","slug":"sizhubazi","status":"publish","type":"page","link":"https:\/\/fortunetellingpro.com\/en\/sizhubazi","title":{"rendered":"Four Pillars Bazi Destiny AI Intelligent Analysis Tool Software"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"29343\" class=\"elementor elementor-29343\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-07fd029 e-flex e-con-boxed e-con e-parent\" data-id=\"07fd029\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bcc212a elementor-widget elementor-widget-shortcode\" data-id=\"bcc212a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\r\n        <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/lunar-javascript@1.2.37\/lunar.js\"><\/script>\r\n        <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/marked\/marked.min.js\"><\/script>\r\n    \r\n    <style>\r\n        \/* --- \u5c4f\u5e55\u901a\u7528\u6837\u5f0f --- *\/\r\n        #bazi-app-v23 {\r\n            --bg: #F9F9F9; --card-bg: #FFFFFF; --primary-gradient: linear-gradient(135deg, #154360 0%, #2980B9 100%);\r\n            --text-main: #2C3E50; --text-sub: #7F8C8D; --border-color: #EAECEE;\r\n            --gold: #B7950B; --wood: #1E8449; --water: #2874A6; --fire: #CB4335; --earth: #A04000;\r\n            font-family: \"PingFang SC\", \"Microsoft YaHei\", sans-serif; color: var(--text-main); line-height: 1.6;\r\n        }\r\n        #bazi-app-v23 .container { max-width: 900px; margin: 0 auto; background: var(--card-bg); border-radius: 12px; box-shadow: 0 10px 30px rgba(0,0,0,0.08); overflow: hidden; }\r\n        #bazi-app-v23 header { background: var(--primary-gradient); color: white; padding: 40px 20px; text-align: center; }\r\n        #bazi-app-v23 header h1 { margin: 0 0 10px 0; font-size: 1.8rem; letter-spacing: 2px; }\r\n        #bazi-app-v23 .section { padding: 30px; border-bottom: 1px solid var(--border-color); }\r\n        \r\n        #bazi-app-v23 .input-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 20px; }\r\n        #bazi-app-v23 label { display: block; margin-bottom: 8px; font-weight: bold; font-size: 0.9rem; }\r\n        #bazi-app-v23 input, #bazi-app-v23 select { width: 100%; padding: 12px; border: 1px solid #D5D8DC; border-radius: 8px; font-size: 1rem; box-sizing: border-box; background: #FAFAFA; }\r\n        #bazi-app-v23 button.main-btn { background: var(--primary-gradient); color: white; border: none; cursor: pointer; margin-top: 30px; width: 100%; padding: 16px; font-size: 1.1rem; border-radius: 50px; transition: transform 0.2s; font-weight: 600; }\r\n        #bazi-app-v23 button.main-btn:hover { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(41, 128, 185, 0.3); }\r\n\r\n        \/* \u5bfc\u51fa\u6309\u94ae *\/\r\n        #bazi-app-v23 button.pdf-btn { \r\n            background: #27AE60; color: white; border: none; cursor: pointer; \r\n            margin-top: 30px; width: 100%; padding: 15px; font-size: 1rem; \r\n            border-radius: 8px; font-weight: bold; display: none; \r\n            box-shadow: 0 4px 12px rgba(39, 174, 96, 0.3);\r\n        }\r\n        #bazi-app-v23 button.pdf-btn:hover { background: #219150; }\r\n\r\n        \/* \u6392\u76d8\u6837\u5f0f *\/\r\n        #bazi-app-v23 .bazi-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 30px; }\r\n        #bazi-app-v23 .pillar-card { background: #fff; border: 1px solid #eee; border-radius: 10px; padding: 15px 5px; text-align: center; box-shadow: 0 2px 8px rgba(0,0,0,0.03); position: relative; }\r\n        #bazi-app-v23 .gan { font-size: 1.8rem; font-weight: bold; display: block; margin-top: 5px; }\r\n        #bazi-app-v23 .zhi { font-size: 1.8rem; font-weight: bold; display: block; margin-bottom: 5px; }\r\n        \r\n        #bazi-app-v23 .shishen-badge { \r\n            font-size: 0.75rem; color: #fff; background: #95A5A6; \r\n            width: 24px; height: 24px; line-height: 24px; border-radius: 50%; \r\n            display: inline-block; margin-bottom: 5px; font-weight: bold;\r\n        }\r\n        #bazi-app-v23 .shishen-badge.dm { background: #2C3E50; width: auto; padding: 0 8px; border-radius: 12px; } \r\n        #bazi-app-v23 .shishen-badge.cai { background: #27AE60; } \r\n        #bazi-app-v23 .shishen-badge.guan { background: #D35400; } \r\n        #bazi-app-v23 .shishen-badge.yin { background: #8E44AD; } \r\n        #bazi-app-v23 .shishen-badge.shi { background: #2980B9; } \r\n        #bazi-app-v23 .shishen-badge.bi { background: #F39C12; } \r\n\r\n        #bazi-app-v23 .dayun-scroll { display: flex; overflow-x: auto; gap: 10px; padding-bottom: 10px; scrollbar-width: thin; }\r\n        #bazi-app-v23 .dayun-card { min-width: 80px; border: 1px solid #eee; border-radius: 8px; padding: 10px; text-align: center; cursor: pointer; transition: all 0.2s; }\r\n        #bazi-app-v23 .dayun-card.active { border-color: #2980B9; background: #EAF2F8; transform: scale(1.05); }\r\n\r\n        #bazi-app-v23 .ai-section { margin-top: 20px; border-top: 1px dashed #ddd; padding-top: 20px; display: none; }\r\n        #bazi-app-v23 .ai-markdown h2 { font-size: 1.4rem; border-bottom: 2px solid #f0f0f0; padding-bottom: 10px; margin-top: 30px; color: #2C3E50; }\r\n        #bazi-app-v23 .ai-markdown h3 { color: #2980B9; margin-top: 25px; font-size: 1.1rem; }\r\n        #bazi-app-v23 .ai-markdown strong { color: #C0392B; }\r\n\r\n        #bazi-app-v23 .color-jin { color: var(--gold); }\r\n        #bazi-app-v23 .color-mu { color: var(--wood); }\r\n        #bazi-app-v23 .color-shui { color: var(--water); }\r\n        #bazi-app-v23 .color-huo { color: var(--fire); }\r\n        #bazi-app-v23 .color-tu { color: var(--earth); }\r\n        \r\n        #bazi-app-v23 .loading-ai { text-align: center; padding: 30px; color: #7F8C8D; }\r\n        #bazi-app-v23 .spinner { width: 30px; height: 30px; border: 3px solid #f3f3f3; border-top: 3px solid #2980B9; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto 10px; }\r\n        @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\r\n\r\n        \/* \u81ea\u5b9a\u4e49\u9875\u811a\u6837\u5f0f (\u9ed8\u8ba4\u9690\u85cf) *\/\r\n        #printFooter { display: none; text-align: center; margin-top: 30px; padding-top: 10px; border-top: 1px solid #eee; font-size: 12px; color: #aaa; }\r\n\r\n        \/* ========================================= *\/\r\n        \/* \ud83d\udda8\ufe0f \u6253\u5370\/PDF \u4e13\u7528\u6837\u5f0f (V23 \u6838\u5fc3\u5347\u7ea7) *\/\r\n        \/* ========================================= *\/\r\n        @media print {\r\n            \/* 1. \u5f3a\u5236\u53bb\u9664\u6d4f\u89c8\u5668\u9ed8\u8ba4\u9875\u7709\u9875\u811a (\u5305\u542b\u957f URL) *\/\r\n            @page {\r\n                margin: 0; \/* \u5173\u952e\uff1a\u8bbe\u4e3a0\u4f1a\u6324\u6389\u6d4f\u89c8\u5668\u81ea\u5e26\u7684 URL *\/\r\n                size: auto;\r\n            }\r\n\r\n            \/* 2. \u9690\u85cf\u7f51\u9875\u5bfc\u822a\u7b49\u65e0\u5173\u5143\u7d20 *\/\r\n            body * { visibility: hidden; }\r\n            #wpadminbar, .site-header, .site-footer, .footer, .sidebar, #secondary, #bazi-app-v23 .input-section-wrap, button { display: none !important; }\r\n            \r\n            \/* 3. \u663e\u793a\u5e94\u7528\u5185\u5bb9 *\/\r\n            #bazi-app-v23, #bazi-app-v23 * { visibility: visible; }\r\n            \r\n            \/* 4. \u7531\u4e8e@page margin\u4e3a0\uff0c\u6211\u4eec\u9700\u8981\u7ed9 body \u52a0\u56de\u8fb9\u8ddd\uff0c\u5426\u5219\u5185\u5bb9\u8d34\u8fb9 *\/\r\n            body {\r\n                margin: 15mm 15mm !important; \/* \u4e0a\u4e0b\u5de6\u53f3\u7559\u767d *\/\r\n                color: #000 !important;\r\n                background: white !important;\r\n            }\r\n\r\n            \/* 5. \u8c03\u6574\u5e94\u7528\u5bb9\u5668 *\/\r\n            #bazi-app-v23 {\r\n                position: absolute; left: 0; top: 0; width: 100%;\r\n                box-shadow: none !important;\r\n            }\r\n            #bazi-app-v23 .container {\r\n                box-shadow: none !important; margin: 0 !important; width: 100% !important; max-width: 100% !important;\r\n                border: none !important;\r\n            }\r\n            \r\n            \/* 6. \u663e\u793a\u6211\u4eec\u81ea\u5b9a\u4e49\u7684\u7eaf\u51c0\u9875\u811a *\/\r\n            #printFooter { display: block !important; }\r\n\r\n            \/* 7. \u5f3a\u5236\u6253\u5370\u80cc\u666f\u8272 *\/\r\n            * { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; }\r\n        }\r\n    <\/style>\r\n    \r\n    <div id=\"bazi-app-v23\">\r\n        <div class=\"container\">\r\n            <header>\r\n                <h1>\ud83c\udf0c Bazi Holography \u00b7 Fortune Compass<\/h1>\r\n                <p>True Solar Time Chart \/ Intelligent Annual Calibration<\/p>\r\n            <\/header>\r\n\r\n            <div class=\"section input-section-wrap\">\r\n                <div style=\"background:#FFF8E1; border-left:4px solid #FFC107; padding:15px; margin-bottom:20px; font-size:0.9rem; color:#856404;\">\r\n                    \u26a0\ufe0f Please enter<strong>Gregorian Calendar<\/strong>Birth time, the system will automatically correct to true solar time.\r\n                <\/div>\r\n                <div class=\"input-grid\">\r\n                    <div><label>Gregorian Date<\/label><input type=\"date\" id=\"birthDate\"><\/div>\r\n                    <div><label>Birth Time<\/label><input type=\"time\" id=\"birthTime\"><\/div>\r\n                    <div><label>Gender<\/label><select id=\"gender\"><option value=\"1\">Male<\/option><option value=\"0\">Female<\/option><\/select><\/div>\r\n                <\/div>\r\n                <button class=\"main-btn\" onclick=\"runBaziSystemV23()\">\ud83d\ude80 Generate Chart &amp; AI Analysis Now<\/button>\r\n            <\/div>\r\n\r\n            <div id=\"chartSection\" style=\"display:none;\">\r\n                <div class=\"section\" id=\"printableContent\">\r\n                    <div id=\"solarTimeInfo\" style=\"text-align:center; color:#2980B9; font-size:0.9rem; margin-bottom:15px;\"><\/div>\r\n                    \r\n                    <div class=\"bazi-grid\" id=\"pillarsContainer\"><\/div>\r\n                    \r\n                    <div style=\"margin-top:20px;\">\r\n                        <h4 style=\"margin:0 0 10px 0; color:#555;\">\ud83d\udee4\ufe0f Life Major Luck<\/h4>\r\n                        <div class=\"dayun-scroll\" id=\"dayunContainer\"><\/div>\r\n                    <\/div>\r\n                    \r\n                    <div id=\"liunianTableBox\" style=\"margin-top:20px; display:none; background:#F8F9F9; padding:15px; border-radius:8px;\">\r\n                        <div style=\"font-weight:bold; margin-bottom:10px;\" id=\"liunianBoxTitle\"><\/div>\r\n                        <table style=\"width:100%; font-size:0.9rem; border-collapse:collapse;\">\r\n                            <thead><tr style=\"border-bottom:1px solid #ddd; text-align:left;\"><th>Year<\/th><th>Age<\/th><th>Annual Luck<\/th><th>Na Yin<\/th><\/tr><\/thead>\r\n                            <tbody id=\"liunianTableBody\"><\/tbody>\r\n                        <\/table>\r\n                    <\/div>\r\n                    \r\n                    <div id=\"aiSection\" class=\"ai-section\">\r\n                        <div id=\"aiLoading\" class=\"loading-ai\">\r\n                            <div class=\"spinner\"><\/div>\r\n                            <p>Connecting to the AI Brain, deeply analyzing the current (2026) fortune...<\/p>\r\n                        <\/div>\r\n                        <div id=\"aiResultBox\" style=\"display:none;\">\r\n                            <h3 style=\"margin-top:0; color:#2C3E50;\">\ud83e\udd16 AI Destiny Analyst Interpretation (This Year)<\/h3>\r\n                            <div id=\"aiOutputText\" class=\"ai-markdown\"><\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    \r\n                    <div id=\"printFooter\"><\/div>\r\n                <\/div>\r\n\r\n                <div style=\"padding: 0 30px 30px 30px;\">\r\n                    <button id=\"downloadPdfBtn\" class=\"pdf-btn\" onclick=\"exportToPDFNative()\">\ud83d\udce5 Export\/Print Full Report<\/button>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n    <\/div>\r\n    \r\n    <script>\r\n        const AJAX_URL_V23 = \"https:\/\/fortunetellingpro.com\/wp-admin\/admin-ajax.php\";\r\n        \r\n        const WUXING_CLASS = { \"\u91d1\": \"color-jin\", \"\u6728\": \"color-mu\", \"\u6c34\": \"color-shui\", \"\u706b\": \"color-huo\", \"\u571f\": \"color-tu\" };\r\n        const GAN_ZHI_WUXING = { \"\u7532\":\"\u6728\",\"\u4e59\":\"\u6728\",\"\u4e19\":\"\u706b\",\"\u4e01\":\"\u706b\",\"\u620a\":\"\u571f\",\"\u5df1\":\"\u571f\",\"\u5e9a\":\"\u91d1\",\"\u8f9b\":\"\u91d1\",\"\u58ec\":\"\u6c34\",\"\u7678\":\"\u6c34\",\"\u5bc5\":\"\u6728\",\"\u536f\":\"\u6728\",\"\u5df3\":\"\u706b\",\"\u5348\":\"\u706b\",\"\u8fb0\":\"\u571f\",\"\u620c\":\"\u571f\",\"\u4e11\":\"\u571f\",\"\u672a\":\"\u571f\",\"\u7533\":\"\u91d1\",\"\u9149\":\"\u91d1\",\"\u4ea5\":\"\u6c34\",\"\u5b50\":\"\u6c34\" };\r\n        const NAYIN_MAP = { \"\u7532\u5b50\":\"\u6d77\u4e2d\u91d1\",\"\u4e59\u4e11\":\"\u6d77\u4e2d\u91d1\",\"\u4e19\u5bc5\":\"\u7089\u4e2d\u706b\",\"\u4e01\u536f\":\"\u7089\u4e2d\u706b\",\"\u620a\u8fb0\":\"\u5927\u6797\u6728\",\"\u5df1\u5df3\":\"\u5927\u6797\u6728\",\"\u5e9a\u5348\":\"\u8def\u65c1\u571f\",\"\u8f9b\u672a\":\"\u8def\u65c1\u571f\",\"\u58ec\u7533\":\"\u5251\u950b\u91d1\",\"\u7678\u9149\":\"\u5251\u950b\u91d1\",\"\u7532\u620c\":\"\u5c71\u5934\u706b\",\"\u4e59\u4ea5\":\"\u5c71\u5934\u706b\",\"\u4e19\u5b50\":\"\u6da7\u4e0b\u6c34\",\"\u4e01\u4e11\":\"\u6da7\u4e0b\u6c34\",\"\u620a\u5bc5\":\"\u57ce\u5934\u571f\",\"\u5df1\u536f\":\"\u57ce\u5934\u571f\",\"\u5e9a\u8fb0\":\"\u767d\u8721\u91d1\",\"\u8f9b\u5df3\":\"\u767d\u8721\u91d1\",\"\u58ec\u5348\":\"\u6768\u67f3\u6728\",\"\u7678\u672a\":\"\u6768\u67f3\u6728\",\"\u7532\u7533\":\"\u6cc9\u4e2d\u6c34\",\"\u4e59\u9149\":\"\u6cc9\u4e2d\u6c34\",\"\u4e19\u620c\":\"\u5c4b\u4e0a\u571f\",\"\u4e01\u4ea5\":\"\u5c4b\u4e0a\u571f\",\"\u620a\u5b50\":\"\u9739\u96f3\u706b\",\"\u5df1\u4e11\":\"\u9739\u96f3\u706b\",\"\u5e9a\u5bc5\":\"\u677e\u67cf\u6728\",\"\u8f9b\u536f\":\"\u677e\u67cf\u6728\",\"\u58ec\u8fb0\":\"\u957f\u6d41\u6c34\",\"\u7678\u5df3\":\"\u957f\u6d41\u6c34\",\"\u7532\u5348\":\"\u6c99\u4e2d\u91d1\",\"\u4e59\u672a\":\"\u6c99\u4e2d\u91d1\",\"\u4e19\u7533\":\"\u5c71\u4e0b\u706b\",\"\u4e01\u9149\":\"\u5c71\u4e0b\u706b\",\"\u620a\u620c\":\"\u5e73\u5730\u6728\",\"\u5df1\u4ea5\":\"\u5e73\u5730\u6728\",\"\u5e9a\u5b50\":\"\u58c1\u4e0a\u571f\",\"\u8f9b\u4e11\":\"\u58c1\u4e0a\u571f\",\"\u58ec\u5bc5\":\"\u91d1\u7b94\u91d1\",\"\u7678\u536f\":\"\u91d1\u7b94\u91d1\",\"\u7532\u8fb0\":\"\u8986\u706f\u706b\",\"\u4e59\u5df3\":\"\u8986\u706f\u706b\",\"\u4e19\u5348\":\"\u5929\u6cb3\u6c34\",\"\u4e01\u672a\":\"\u5929\u6cb3\u6c34\",\"\u620a\u7533\":\"\u5927\u9a7f\u571f\",\"\u5df1\u9149\":\"\u5927\u9a7f\u571f\",\"\u5e9a\u620c\":\"\u9497\u948f\u91d1\",\"\u8f9b\u4ea5\":\"\u9497\u948f\u91d1\",\"\u58ec\u5b50\":\"\u6851\u67d8\u6728\",\"\u7678\u4e11\":\"\u6851\u67d8\u6728\",\"\u7532\u5bc5\":\"\u5927\u6eaa\u6c34\",\"\u4e59\u536f\":\"\u5927\u6eaa\u6c34\",\"\u4e19\u8fb0\":\"\u6c99\u4e2d\u571f\",\"\u4e01\u5df3\":\"\u6c99\u4e2d\u571f\",\"\u620a\u5348\":\"\u5929\u4e0a\u706b\",\"\u5df1\u672a\":\"\u5929\u4e0a\u706b\",\"\u5e9a\u7533\":\"\u77f3\u69b4\u6728\",\"\u8f9b\u9149\":\"\u77f3\u69b4\u6728\",\"\u58ec\u620c\":\"\u5927\u6d77\u6c34\",\"\u7678\u4ea5\":\"\u5927\u6d77\u6c34\" };\r\n\r\n        const SHISHEN_SHORT_MAP = {\r\n            \"\u6bd4\u80a9\": \"\u6bd4\", \"\u52ab\u8d22\": \"\u52ab\", \r\n            \"\u98df\u795e\": \"\u98df\", \"\u4f24\u5b98\": \"\u4f24\",\r\n            \"\u504f\u8d22\": \"\u624d\", \"\u6b63\u8d22\": \"\u8d22\",\r\n            \"\u4e03\u6740\": \"\u6740\", \"\u6b63\u5b98\": \"\u5b98\",\r\n            \"\u504f\u5370\": \"\u67ad\", \"\u6b63\u5370\": \"\u5370\"\r\n        };\r\n        const SHISHEN_COLOR_TYPE = {\r\n            \"\u6bd4\": \"bi\", \"\u52ab\": \"bi\",\r\n            \"\u98df\": \"shi\", \"\u4f24\": \"shi\",\r\n            \"\u624d\": \"cai\", \"\u8d22\": \"cai\",\r\n            \"\u6740\": \"guan\", \"\u5b98\": \"guan\",\r\n            \"\u67ad\": \"yin\", \"\u5370\": \"yin\"\r\n        };\r\n\r\n        function getColor(char) { return WUXING_CLASS[GAN_ZHI_WUXING[char]] || \"\"; }\r\n\r\n        function getTrueSolarTime(dateStr, timeStr) {\r\n            const dateObj = new Date(dateStr + \"T\" + timeStr + \":00\");\r\n            const longitude = 114; \r\n            const offsetMin = (longitude - 120) * 4;\r\n            const start = new Date(dateObj.getFullYear(), 0, 0);\r\n            const diff = dateObj - start;\r\n            const oneDay = 86400000;\r\n            const dayOfYear = Math.floor(diff \/ oneDay);\r\n            const B = 360 * (dayOfYear - 81) \/ 365 * (Math.PI \/ 180);\r\n            const eot = 9.87 * Math.sin(2 * B) - 7.53 * Math.cos(B) - 1.5 * Math.sin(B);\r\n            return new Date(dateObj.getTime() + (offsetMin + eot) * 60000);\r\n        }\r\n\r\n        let globalDaYunList = [];\r\n        let globalBirthYear = 0;\r\n\r\n        async function runBaziSystemV23() {\r\n            const d = document.getElementById(\"birthDate\").value;\r\n            const t = document.getElementById(\"birthTime\").value;\r\n            const g = document.getElementById(\"gender\").value;\r\n            \r\n            if(!d || !t) { alert(\"\u8bf7\u586b\u5199\u5b8c\u6574\u65e5\u671f\u548c\u65f6\u95f4\"); return; }\r\n            if(typeof Solar === \"undefined\") { alert(\"\u7ec4\u4ef6\u5e93\u52a0\u8f7d\u5931\u8d25\uff0c\u8bf7\u5237\u65b0\u9875\u9762\"); return; }\r\n\r\n            document.getElementById(\"chartSection\").style.display = \"none\";\r\n            document.getElementById(\"aiSection\").style.display = \"none\";\r\n            document.getElementById(\"downloadPdfBtn\").style.display = \"none\";\r\n            document.getElementById(\"aiOutputText\").innerHTML = \"\";\r\n\r\n            try {\r\n                const tzt = getTrueSolarTime(d, t);\r\n                const solar = Solar.fromYmdHms(tzt.getFullYear(), tzt.getMonth()+1, tzt.getDate(), tzt.getHours(), tzt.getMinutes(), 0);\r\n                const lunar = solar.getLunar();\r\n                const bazi = lunar.getEightChar();\r\n                globalBirthYear = solar.getYear();\r\n\r\n                const tztStr = tzt.getFullYear()+\"-\"+(tzt.getMonth()+1)+\"-\"+tzt.getDate()+\" \"+tzt.getHours()+\":\"+(tzt.getMinutes()<10?\"0\":\"\")+tzt.getMinutes();\r\n                document.getElementById(\"solarTimeInfo\").innerHTML = \"\u6392\u76d8\u65f6\u95f4(\u771f\u592a\u9633\u65f6): <b>\" + tztStr + \"<\/b>\";\r\n\r\n                renderPillars(bazi);\r\n                \r\n                const yun = bazi.getYun(parseInt(g));\r\n                globalDaYunList = yun.getDaYun();\r\n                renderDaYun(globalDaYunList, solar.getYear());\r\n\r\n                document.getElementById(\"chartSection\").style.display = \"block\";\r\n                document.getElementById(\"aiSection\").style.display = \"block\";\r\n                document.getElementById(\"aiLoading\").style.display = \"block\";\r\n                document.getElementById(\"aiResultBox\").style.display = \"none\";\r\n                \r\n                \/\/ \u81ea\u52a8\u8bbe\u7f6e\u9875\u811a\u57df\u540d\r\n                document.getElementById(\"printFooter\").innerText = \"\u00a9 \" + window.location.hostname + \" \u547d\u7406\u5206\u6790\u62a5\u544a\";\r\n\r\n                const realCurrentYear = new Date().getFullYear(); \r\n                \r\n                const historyDataPrompt = generateHistoryData(yun, solar.getYear(), realCurrentYear);\r\n                const dayMaster = bazi.getDayGan().toString(); \r\n                const fullChart = `\u5e74:${bazi.getYearGan().toString()}${bazi.getYearZhi().toString()} \u6708:${bazi.getMonthGan().toString()}${bazi.getMonthZhi().toString()} \u65e5:${bazi.getDayGan().toString()}${bazi.getDayZhi().toString()} \u65f6:${bazi.getTimeGan().toString()}${bazi.getTimeZhi().toString()}`;\r\n                \r\n                const prompt = `\r\n\u4f60\u662f\u4e00\u4f4d\u7cbe\u901a\u76f2\u6d3e\u547d\u7406\u7684\u5927\u5e08\u3002\r\n\u3010\u91cd\u8981\u6307\u4ee4\u3011\u5f53\u524d\u7cfb\u7edf\u7684\u771f\u5b9e\u65e5\u671f\u662f ${realCurrentYear}\u5e74\u3002\u8bf7\u52a1\u5fc5\u5c06 ${realCurrentYear}\u5e74 \u89c6\u4e3a\"\u4eca\u5e74\/\u5f53\u524d\"\uff0c${realCurrentYear+1}\u5e74 \u89c6\u4e3a\"\u660e\u5e74\"\u3002\r\n\r\n\u3010\u6392\u76d8\u6570\u636e\u3011\r\n\u6027\u522b\uff1a${g == \"1\" ? \"\u7537\" : \"\u5973\"}\r\n\u65e5\u4e3b\uff1a${dayMaster} (\u6838\u5fc3\u80fd\u91cf)\r\n\u516b\u5b57\uff1a${fullChart}\r\n\r\n\u3010\u6d41\u5e74\u5927\u8fd0\u8868\u3011\r\n${historyDataPrompt}\r\n\r\n\u3010\u5206\u6790\u8981\u6c42\u3011\r\n1. **\u5f53\u524d\u8fd0\u52bf (\u4eca\u5e74 ${realCurrentYear})**\uff1a\r\n   - \u627e\u5230\u8868\u4e2d\u6807\u8bb0\u4e3a [\u2605 \u4eca\u5e74] \u7684\u5e74\u4efd\u3002\r\n   - \u5206\u6790\u4eca\u5e74\u7684\u6d41\u5e74\u5e72\u652f\u4e0e\u65e5\u4e3b\u53ca\u5927\u8fd0\u7684\u5173\u7cfb\u3002\r\n   - \u7ed9\u51fa\"\u4eca\u5e74\"\u7684\u4e8b\u4e1a\u3001\u8d22\u8fd0\u3001\u5065\u5eb7\u3001\u611f\u60c5\u7684\u5177\u4f53\u65ad\u8bed\u3002\r\n2. **\u660e\u5e74\u8fd0\u52bf (${realCurrentYear+1})**\uff1a\r\n   - \u7b80\u8981\u9884\u6d4b\u660e\u5e74\u7684\u5409\u51f6\u8d8b\u52bf\u3002\r\n3. **\u8fc7\u53bb\u56de\u987e**\uff1a\r\n \u00a0 - \u56de\u987e\u8fc7\u53bb10\u5e74\u7684\u8d77\u4f0f\u5409\u51f6\u8d8b\u52bf\uff08\u8fd9\u4e2a\u975e\u5e38\u91cd\u8981\u8981\u91cd\u70b9\u8be6\u7ec6\u5206\u6790\uff09 \u8fc7\u53bb\u5927\u6982\u7387\u53d1\u751f\u7684\u4e8b\u60c5\u6bd4\u5982\u611f\u60c5\u662f\u6709\u4e86\u65b0\u7684\u611f\u60c5\uff0c\u662f\u5426\u604b\u7231 \u8fd8\u662f\u5206\u624b\u3002 \u8eab\u4f53\u5065\u5eb7\u54ea\u91cc\u5927\u6982\u51fa\u73b0\u95ee\u9898\uff0c\u7834\u8d22\u5927\u6982\u56e0\u4e3a\u4ec0\u4e48\u7834\u8d22\uff0c\u4e8b\u4e1a\u8fd0\u597d \u5927\u6982\u7387\u5728\u505a\u4ec0\u4e48 \u9a8c\u8bc1\u547d\u7406\u51c6\u786e\u6027\u3002\r\n4. **\u6027\u683c\u5206\u6790**\uff1a\r\n \u00a0 \u00a0\u5206\u6790\u7684\u547d\u4e3b\u6027\u683c\uff0c\u6027\u683c\u4f18\u7f3a\u70b9\uff0c\u7f3a\u70b9\u5982\u4f55\u6539\u5584\u81ea\u6211\u3002\r\n5. **\u4e94\u884c\u8c03\u5019\u4e0e\u5efa\u8bae**\uff1a\r\n   - \u9488\u5bf9\u4eca\u5e74\u7684\u4e94\u884c\u5f3a\u5f31\uff0c\u7ed9\u51fa\u5e78\u8fd0\u8272\u548c\u884c\u4e3a\u5efa\u8bae\u3002\r\n\r\n\u8f93\u51fa\u8981\u6c42\uff1a\u4f7f\u7528 Markdown \u683c\u5f0f\uff0c\u6761\u7406\u6e05\u6670\u3002\r\n`;\r\n                await callAI(prompt);\r\n\r\n            } catch (e) {\r\n                console.error(e);\r\n                alert(\"\u7a0b\u5e8f\u51fa\u9519: \" + e.message);\r\n                document.getElementById(\"aiLoading\").style.display = \"none\";\r\n            }\r\n        }\r\n\r\n        function exportToPDFNative() {\r\n            alert(\"\u2728 \u5373\u5c06\u751f\u6210\u9884\u89c8 \u2728\\n\\n\u5982\u679c\u770b\u4e0d\u5230\u80cc\u666f\u8272\uff0c\u8bf7\u5728\u6253\u5370\u9009\u9879\u4e2d\u52fe\u9009\u3010\u80cc\u666f\u56fe\u5f62\u3011\u3002\\n\u9875\u7709\u9875\u811a\u5df2\u88ab\u81ea\u52a8\u4f18\u5316\uff0c\u53ea\u663e\u793a\u4e3b\u57df\u540d\u3002\");\r\n            window.print();\r\n        }\r\n\r\n        function generateHistoryData(yunObj, birthYear, realCurrentYear) {\r\n            let txt = \"\";\r\n            const startYear = realCurrentYear - 8; \r\n            const endYear = realCurrentYear + 2;   \r\n\r\n            for (let y = startYear; y <= endYear; y++) {\r\n                const age = y - birthYear + 1;\r\n                const l = Lunar.fromYmd(y, 6, 1); \r\n                const yearGanZhi = l.getYearInGanZhi(); \r\n                const naYin = NAYIN_MAP[yearGanZhi] || \"\";\r\n                \r\n                let currentDayunStr = \"\u672a\u8d77\u8fd0\";\r\n                for (let i = 0; i < globalDaYunList.length; i++) {\r\n                    const dy = globalDaYunList[i];\r\n                    if (age >= dy.getStartAge() && age <= dy.getEndAge()) {\r\n                        currentDayunStr = dy.getGanZhi() + \"\u5927\u8fd0 (\" + dy.getStartAge() + \"-\" + dy.getEndAge() + \"\u5c81)\";\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                let yearTag = \"\";\r\n                if (y === realCurrentYear) {\r\n                    yearTag = \" \u3010\u2605 \u4eca\u5e74\/Current Year\u3011\";\r\n                } else if (y === realCurrentYear + 1) {\r\n                    yearTag = \" \u3010\u660e\u5e74\/Next Year\u3011\";\r\n                }\r\n\r\n                txt += `- ${y}\u5e74${yearTag} (${age}\u5c81): \u6d41\u5e74\u3010${yearGanZhi}\u3011(${naYin}) | \u6240\u5728\u5927\u8fd0: ${currentDayunStr}\\n`;\r\n            }\r\n            return txt;\r\n        }\r\n\r\n        function renderPillars(bazi) {\r\n            const div = document.getElementById(\"pillarsContainer\");\r\n            div.innerHTML = \"\";\r\n            const dayGan = bazi.getDayGan();\r\n\r\n            const pillars = [\r\n                {t:\"\u5e74\", gObj:bazi.getYearGan(), z:bazi.getYearZhi().toString()},\r\n                {t:\"\u6708\", gObj:bazi.getMonthGan(), z:bazi.getMonthZhi().toString()},\r\n                {t:\"\u65e5\", gObj:bazi.getDayGan(), z:bazi.getDayZhi().toString()},\r\n                {t:\"\u65f6\", gObj:bazi.getTimeGan(), z:bazi.getTimeZhi().toString()}\r\n            ];\r\n\r\n            pillars.forEach((p, idx) => {\r\n                let shishenLabel = \"\";\r\n                let shishenClass = \"\";\r\n                if (idx === 2) {\r\n                    shishenLabel = \"\u65e5\u4e3b\";\r\n                    shishenClass = \"dm\";\r\n                } else {\r\n                    try {\r\n                        const fullShishen = p.gObj.getShiShenGan(dayGan).toString(); \r\n                        const shortShishen = SHISHEN_SHORT_MAP[fullShishen] || fullShishen; \r\n                        shishenLabel = shortShishen;\r\n                        shishenClass = SHISHEN_COLOR_TYPE[shortShishen] || \"\";\r\n                    } catch(e) { shishenLabel = \"-\"; }\r\n                }\r\n\r\n                div.innerHTML += `\r\n                <div class=\"pillar-card\">\r\n                    <span class=\"shishen-badge ${shishenClass}\">${shishenLabel}<\/span>\r\n                    <span class=\"gan ${getColor(p.gObj.toString())}\">${p.gObj.toString()}<\/span>\r\n                    <span class=\"zhi ${getColor(p.z)}\">${p.z}<\/span>\r\n                    <div style=\"font-size:0.8rem;color:#999;\">${NAYIN_MAP[p.gObj.toString()+p.z]||\"\"}<\/div>\r\n                <\/div>`;\r\n            });\r\n        }\r\n\r\n        function renderDaYun(list, birthYear) {\r\n            const div = document.getElementById(\"dayunContainer\");\r\n            div.innerHTML = \"\";\r\n            const currentAge = new Date().getFullYear() - birthYear + 1;\r\n\r\n            list.forEach((dy, idx) => {\r\n                if(idx === 0) return;\r\n                const isActive = (currentAge >= dy.getStartAge() && currentAge <= dy.getEndAge());\r\n                const cls = isActive ? \"dayun-card active\" : \"dayun-card\";\r\n                const gz = dy.getGanZhi(); \r\n                div.innerHTML += `\r\n                    <div class=\"${cls}\" onclick=\"showLiunian(${idx}, ${birthYear})\">\r\n                        <div style=\"font-weight:bold;\">\r\n                            <span class=\"${getColor(gz[0])}\">${gz[0]}<\/span>\r\n                            <span class=\"${getColor(gz[1])}\">${gz[1]}<\/span>\r\n                        <\/div>\r\n                        <div style=\"font-size:0.75rem;margin-top:4px;\">${dy.getStartAge()}-${dy.getEndAge()}\u5c81<\/div>\r\n                        ${isActive ? \"<div style='font-size:0.6rem;background:#E74C3C;color:#fff;border-radius:2px;'>\u5f53\u524d<\/div>\" : \"\"}\r\n                    <\/div>\r\n                `;\r\n                if(isActive) showLiunian(idx, birthYear);\r\n            });\r\n        }\r\n\r\n        window.showLiunian = function(dyIdx, birthYear) {\r\n            const dy = globalDaYunList[dyIdx];\r\n            const list = dy.getLiuNian();\r\n            const box = document.getElementById(\"liunianTableBox\");\r\n            const tbody = document.getElementById(\"liunianTableBody\");\r\n            const title = document.getElementById(\"liunianBoxTitle\");\r\n            const currentAge = new Date().getFullYear() - birthYear + 1;\r\n\r\n            box.style.display = \"block\";\r\n            title.innerHTML = `\ud83d\udcc5 ${dy.getGanZhi()}\u5927\u8fd0 \u00b7 \u6d41\u5e74\u8be6\u60c5`;\r\n            tbody.innerHTML = \"\";\r\n\r\n            list.forEach(ln => {\r\n                const isCur = ln.getAge() === currentAge;\r\n                const gz = ln.getGanZhi();\r\n                const bg = isCur ? \"background:#FFF8E1;\" : \"\";\r\n                tbody.innerHTML += `\r\n                    <tr style=\"border-bottom:1px solid #eee; ${bg}\">\r\n                        <td style=\"padding:8px;\">${ln.getYear()}<\/td>\r\n                        <td style=\"padding:8px;\">${ln.getAge()}\u5c81<\/td>\r\n                        <td style=\"padding:8px; font-weight:bold;\">\r\n                            <span class=\"${getColor(gz[0])}\">${gz[0]}<\/span>\r\n                            <span class=\"${getColor(gz[1])}\">${gz[1]}<\/span>\r\n                        <\/td>\r\n                        <td style=\"padding:8px; color:#777;\">${NAYIN_MAP[gz]||\"\"}<\/td>\r\n                    <\/tr>\r\n                `;\r\n            });\r\n        };\r\n\r\n        async function callAI(promptText) {\r\n            const fd = new FormData();\r\n            fd.append(\"action\", \"bazi_gemini_v23\");\r\n            fd.append(\"prompt\", promptText);\r\n\r\n            const res = await fetch(AJAX_URL_V23, { method: \"POST\", body: fd });\r\n            const json = await res.json();\r\n\r\n            document.getElementById(\"aiLoading\").style.display = \"none\";\r\n            document.getElementById(\"aiResultBox\").style.display = \"block\";\r\n\r\n            if (json.success && json.data.candidates) {\r\n                const rawText = json.data.candidates[0].content.parts[0].text;\r\n                typeWriter(rawText, \"aiOutputText\");\r\n            } else {\r\n                document.getElementById(\"aiOutputText\").innerText = \"AI \u670d\u52a1\u54cd\u5e94\u5f02\u5e38: \" + (json.data.message || \"\u672a\u77e5\u9519\u8bef\");\r\n            }\r\n        }\r\n\r\n        function typeWriter(text, elId) {\r\n            const el = document.getElementById(elId);\r\n            el.innerHTML = \"\";\r\n            let i = 0;\r\n            const speed = 15;\r\n            function type() {\r\n                if (i < text.length) {\r\n                    const chunk = text.substring(0, i+3);\r\n                    el.innerText = chunk;\r\n                    i += 3;\r\n                    setTimeout(type, speed);\r\n                } else {\r\n                    el.innerHTML = marked.parse(text);\r\n                    document.getElementById(\"downloadPdfBtn\").style.display = \"block\";\r\n                }\r\n            }\r\n            type();\r\n        }\r\n\r\n    <\/script>\r\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-29343","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/pages\/29343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/comments?post=29343"}],"version-history":[{"count":32,"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/pages\/29343\/revisions"}],"predecessor-version":[{"id":29383,"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/pages\/29343\/revisions\/29383"}],"wp:attachment":[{"href":"https:\/\/fortunetellingpro.com\/en\/wp-json\/wp\/v2\/media?parent=29343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}