Перейти к содержимому

Moon Phase Calculator

Вычислите текущую фазу луны, процент освещённости и информацию о лунном цикле для любой даты.

Об этом инструменте

Калькулятор лунных фаз помогает вам узнать текущую фазу луны, процент освещённости и подробную информацию о лунном цикле на любую дату—прошлую, настоящую или будущую. Понимание внешнего вида и положения луны в её 29,5-дневном цикле ценно для астрономов-любителей, садоводов, следующих лунному календарю, фотографов, планирующих ночные съёмки, и всех, кто интересуется поведением нашего естественного спутника.

Просто введите любую дату с помощью выбора календаря, и инструмент мгновенно отобразит название лунной фазы, процент освещённости лунного диска, количество дней текущего цикла и дату следующего полнолуния или новолуния. Вы можете исследовать внешний вид луны в день вашего рождения, проверить условия для предстоящих астрономических событий или отследить, как лунные циклы влияют на такие виды деятельности, как посадка или рыбалка.

Этот калькулятор использует астрономические алгоритмы для расчета положений луны с высокой точностью, что делает его надёжным для образовательных проектов, творческого планирования и случайного наблюдения звёзд. Помните, что проценты освещённости являются приблизительными значениями; фактическая видимость зависит от вашего местоположения, местной погоды и времени суток.

Часто задаваемые вопросы

Реализация кода

import math
from datetime import date, datetime

def calculate_moon_phase(year: int, month: int, day: int) -> dict:
    """
    Calculate moon phase using the Conway algorithm.
    Returns phase name, illumination percentage, and age in days.
    """
    # Julian date calculation
    if month <= 2:
        year -= 1
        month += 12

    A = int(year / 100)
    B = 2 - A + int(A / 4)
    julian = int(365.25 * (year + 4716)) + int(30.6001 * (month + 1)) + day + B - 1524.5

    # Days since known new moon (Jan 6, 2000)
    known_new_moon = 2451549.5
    lunation = 29.53058868

    age = (julian - known_new_moon) % lunation
    illumination = (1 - math.cos(2 * math.pi * age / lunation)) / 2

    # Phase name
    phases = [
        (0.03, "New Moon"), (0.22, "Waxing Crescent"), (0.28, "First Quarter"),
        (0.47, "Waxing Gibbous"), (0.53, "Full Moon"), (0.72, "Waning Gibbous"),
        (0.78, "Last Quarter"), (0.97, "Waning Crescent"), (1.00, "New Moon")
    ]
    fraction = age / lunation
    phase_name = next(name for threshold, name in phases if fraction <= threshold)

    return {
        "age_days": round(age, 2),
        "illumination_pct": round(illumination * 100, 1),
        "phase": phase_name,
        "fraction": round(fraction, 4)
    }

result = calculate_moon_phase(2024, 1, 15)
print(f"Phase: {result['phase']}")
print(f"Age: {result['age_days']} days")
print(f"Illumination: {result['illumination_pct']}%")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.