Sun-Moon Compatibility Calculator

ANALife Services AuthorityNational Calculator Authority›Sun-Moon Compatibility Calculator

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

Sun-Moon Compatibility Calculator

Discover astrological compatibility between two people based on their Sun sign (birth date) and Moon sign (approximate lunar position). Enter both birth dates to calculate elemental harmony, aspect angles, and an overall compatibility score.

### Person 1

Date of Birth

### Person 2

Date of Birth

Calculate Compatibility Enter both birth dates and click Calculate.

function sunCalc() { const dob1 = document.getElementById('sun-dob1').value; const dob2 = document.getElementById('sun-dob2').value; const resultDiv = document.getElementById('sun-result');

if (!dob1 || !dob2) { resultDiv.innerHTML = 'Please enter both birth dates.'; return; }

const d1 = new Date(dob1); const d2 = new Date(dob2); const now = new Date();

if (d1 >= now || d2 >= now) { resultDiv.innerHTML = 'Birth dates must be in the past.'; return; }

// ── Sun Sign Calculation ────────────────────────────────────────────────── // Based on standard tropical zodiac date ranges function getSunSign(date) { const m = date.getMonth() + 1; // 1-12 const d = date.getDate(); const signs = [ { name: 'Aries', symbol: '♈', element: 'Fire', quality: 'Cardinal', start: [3,21], end: [4,19] }, { name: 'Taurus', symbol: '♉', element: 'Earth', quality: 'Fixed', start: [4,20], end: [5,20] }, { name: 'Gemini', symbol: '♊', element: 'Air', quality: 'Mutable', start: [5,21], end: [6,20] }, { name: 'Cancer', symbol: '♋', element: 'Water', quality: 'Cardinal', start: [6,21], end: [7,22] }, { name: 'Leo', symbol: '♌', element: 'Fire', quality: 'Fixed', start: [7,23], end: [8,22] }, { name: 'Virgo', symbol: '♍', element: 'Earth', quality: 'Mutable', start: [8,23], end: [9,22] }, { name: 'Libra', symbol: '♎', element: 'Air', quality: 'Cardinal', start: [9,23], end: [10,22] }, { name: 'Scorpio', symbol: '♏', element: 'Water', quality: 'Fixed', start: [10,23],end: [11,21] }, { name: 'Sagittarius', symbol: '♐', element: 'Fire', quality: 'Mutable', start: [11,22],end: [12,21] }, { name: 'Capricorn', symbol: '♑', element: 'Earth', quality: 'Cardinal', start: [12,22],end: [1,19] }, { name: 'Aquarius', symbol: '♒', element: 'Air', quality: 'Fixed', start: [1,20], end: [2,18] }, { name: 'Pisces', symbol: '♓', element: 'Water', quality: 'Mutable', start: [2,19], end: [3,20] }, ]; for (let s of signs) { const [sm, sd] = s.start; const [em, ed] = s.end; if (sm = sd) || (m === em && d sm && m = sd) || m > sm || (m === em && d 180) diff = 360 - diff; // Orb tolerance ±10° const aspects = [ { name: 'Conjunction', angle: 0, score: 90, desc: 'Powerful unity and shared energy' }, { name: 'Sextile', angle: 60, score: 80, desc: 'Harmonious opportunity and ease' }, { name: 'Square', angle: 90, score: 45, desc: 'Dynamic tension and challenge' }, { name: 'Trine', angle: 120, score: 95, desc: 'Natural flow and deep harmony' }, { name: 'Quincunx', angle: 150, score: 40, desc: 'Adjustment and adaptation needed' }, { name: 'Opposition', angle: 180, score: 60, desc: 'Polarity, attraction and balance' }, ]; let closest = null; let minDist = 999; for (let a of aspects) { const dist = Math.abs(diff - a.angle); if (dist = 85) return { text: 'Exceptional ✨', color: '#2ecc71' }; if (s >= 70) return { text: 'Strong 💫', color: '#27ae60' }; if (s >= 55) return { text: 'Moderate 🌙', color: '#f39c12' }; if (s >= 40) return { text: 'Challenging 🌗', color: '#e67e22' }; return { text: 'Difficult 🌑', color: '#e74c3c' }; } const lbl = label(finalScore);

// ── Render ──────────────────────────────────────────────────────────────── function aspectBadge(a) { const c = a.inOrb ? (a.score >= 70 ? '#27ae60' : a.score >= 55 ? '#f39c12' : '#e74c3c') : '#95a5a6'; return ${a.name} (${a.angle}°); }

resultDiv.innerHTML = ` ### Compatibility Report

Person 1 ☀️ Sun: ${sun1.symbol} ${sun1.name} (${sun1.element} / ${sun1.quality}) 🌙 Moon: ${moon1.symbol} ${moon1.name} (${moon1.element} / ${moon1.quality})

Person 2 ☀️ Sun: ${sun2.symbol} ${sun2.name} (${sun2.element} / ${sun2.quality}) 🌙 Moon: ${moon2.symbol} ${moon2.name} (${moon2.element} / ${moon2.quality})

${finalScore}/100 ${lbl.text}

🔭 Aspect Analysis

Pairing Aspect Score Meaning

P1 Sun → P2 Moon${aspectBadge(asp_s1m2)}${asp_s1m2.score}${asp_s1m2.desc} P1 Moon → P2 Sun${aspectBadge(asp_m1s2)}${asp_m1s2.score}${asp_m1s2.desc} Moon – Moon${aspectBadge(asp_m1m2)}${asp_m1m2.score}${asp_m1m2.desc} Sun – Sun${aspectBadge(asp_s1s2)}${asp_s1s2.score}${asp_s1s2.desc}

🔥 Sun Elements ${sun1.element} ↔ ${sun2.element} Score: ${sunElem.score} ${sunElem.desc}

🌊 Moon Elements ${moon1.element} ↔ ${moon2.element} Score: ${moonElem.score} ${moonElem.desc}

⚙️ Modalities ${sun1.quality} ↔ ${sun2.quality} Score: ${sunQual.score} ${sunQual.desc}

`; }

#### Formula

Sun Sign: Determined by tropical zodiac date ranges (e.g., Aries: Mar 21 – Apr 19).

Moon Sign: Approximated using the Julian Day Number (JDN) and mean sidereal lunar period:

JDN = day + ⌊(153m+2)/5⌋ + 365y + ⌊y/4⌋ − ⌊y/100⌋ + ⌊y/400⌋ − 32045 Moon Longitude = ((JDN − 2451545.0) × (360 / 27.32166) + 218.3165°) mod 360° Moon Sign Index = ⌊Longitude / 30⌋

Aspect Angle: Shortest arc between two sign midpoints (sign index × 30° + 15°). Orb tolerance ±10°.

Overall Score:

Base = (P1Sun→P2Moon × 0.30) + (P1Moon→P2Sun × 0.30) + (Moon-Moon × 0.20) + (Sun-Sun × 0.20) Element Bonus = ((SunElem + MoonElem) / 2 − 50) × 0.10 Quality Bonus = (SunQuality − 50) × 0.05 Final Score = clamp(Base + ElementBonus + QualityBonus, 0, 100)

#### Assumptions & References

More Calculators

Read Next

Study Time Planner ANA › Life Services Authority › National Calculator Authority › Study Time Planner .calc-container { max-width: 640px; margin:...

References