Пуштросэз вылэ выжоно

Модуль:MoonInfoDay

Мегавики-ысь

Для документации этого модуля может быть создана страница Модуль:MoonInfoDay/doc

local p = {}

-- Таблица с названиями месяцев
local months = {
    "ғинуар", "февраль", "март", "апрель", "май", "июнь",
    "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"
}

-- Вспомогательная функция для расчёта Юлианской даты
local function calculateJulianDate(year, month, day)
    if month <= 2 then
        year = year - 1
        month = month + 12
    end
    local A = math.floor(year / 100)
    local B = 2 - A + math.floor(A / 4)
    return math.floor(365.25 * (year + 4716)) + math.floor(30.6001 * (month + 1)) + day + B - 1524.5
end

-- Расчёт фазы Луны и лунного дня
local function calculateMoonPhase(jd)
    local daysSinceNewMoon = (jd - 2451550.1) / 29.53058867
    local phase = daysSinceNewMoon % 1
    local age = phase * 29.53058867 -- Возраст Луны с десятичными долями

    local moonDay = math.floor((jd - 2451550.1) % 29.53058867) + 1 -- Лунный день

    local moonSymbol, moonPhase
    if age < 2 then
        moonSymbol, moonPhase = "🌑", "[[Толэзьлэн фазаосыз|Выль толэзь]]"
    elseif age < 6 then
        moonSymbol, moonPhase = "🌒", "[[Толэзьлэн фазаосыз|Егит Толэзь]]"
    elseif age < 10 then
        moonSymbol, moonPhase = "🌓", "[[Толэзьлэн фазаосыз|Нырысетӥ ньыльмосэз]]"
    elseif age < 13 then
        moonSymbol, moonPhase = "🌔", "[[Толэзьлэн фазаосыз|Йылӥсь Толэзь]]"
    elseif age < 17 then
        moonSymbol, moonPhase = "🌕", "[[Толэзьлэн фазаосыз|Тыр толэзь]]"
    elseif age < 21 then
        moonSymbol, moonPhase = "🌖", "[[Толэзьлэн фазаосыз|Синӥсь Толэзь]]"
    elseif age < 24 then
        moonSymbol, moonPhase = "🌗", "[[Толэзьлэн фазаосыз|Берпуметӥ ньыльмосэз]]"
    else
        moonSymbol, moonPhase = "🌘", "[[Толэзьлэн фазаосыз|Вуж Толэзь]]"
    end

    return moonSymbol, moonPhase, age
end

-- Функция для вычисления Луны на определённую дату
function p.calculateMoonForDay(frame)
    local dateString = frame.args["date"]
    local year, month, day = dateString:match("(%d+)-(%d+)-(%d+)")
    year = tonumber(year)
    month = tonumber(month)
    day = tonumber(day)

    local jd = calculateJulianDate(year, month, day)
    local moonSymbol, moonPhase, age = calculateMoonPhase(jd)
    
    return string.format("%s %s (будэмез %.2f нунал).", moonSymbol, moonPhase, age)
end

-- Возврат таблицы с функциями
return p