Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Доработать скрипт (https://javascript.ru/forum/misc/78800-dorabotat-skript.html)

Блондинка 08.11.2019 16:01

В скрипте что то говорится про старый и новый стиль, но для меня это китайская грамота, в которой я нихрена не понимаю, если бы хоть что-то понимала то соответственно и топик не создавала...

laimas 08.11.2019 16:19

Ну если разная, узнавайте век и оперируйте разницей этого века.

Блондинка 08.11.2019 17:27

laimas,
вот запускаемый пример
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <style>
    div { width: 70%; border: 1px solid #a9a9a9; border-radius: 12px/9px; padding: 10px 25px; margin: 0 20px 5px 0; }
    input { display: inline-block; text-align: center; }
    </style>
</head>
<body>
    <div>
        <input id="YearEntry" type="number" min="326" max="4099" step="1" value="2019" />
        <input id="button1" type="button" value="Расcчитать" />
    </div>
    <div>
        Католическая пасха<br />
        <span id="Catholic_Easter"></span>
    </div>
    <div>
        Православная пасха<br />
        <span id="Orthodox_Easter"></span>
    </div>
    <div>
        Радуница<br />
        <span id="Orthodox_Radunitsa"></span>
    </div>
    <div>
        Вербное воскресенье<br />
        <span id="palm_Sunday_Orthodox"></span>
    </div>
    <div>
        Масленица<br />
        <span id="Maslenitsa_Orthodox"></span>
    </div>
    <script>
        function catholicDate(year) {
            // https://ru.wikipedia.org/wiki/Алгоритм_Гаусса_вычисления_даты_Пасхи
            // Пример на 1777 год (год рождения Карла Гаусса): год = 1777 
            // a = год mod 19      a = 10 
            var a = year % 19;
            // b = год mod 4       b = 1 
            var b = year % 4;
            // c = год mod 7       c = 6 
            var c = year % 7;
            // k = целая часть (год/100)           k = 17 
            var k = Math.floor(year / 100);
            // p = целая часть ((13 + 8k)/25)      p = 5 
            var p = Math.floor((13 + 8 * k) / 25);
            // q = целая часть (k/4)               q = 4 
            var q = Math.floor(k / 4);
            // M = (15 - p + k - q) mod 30         M = 23 
            var m = (15 - p + k - q) % 30;
            // N = (4 + k - q) mod 7               N = 3 
            var n = (4 + k - q) % 7;
            // d = (19a + M) mod 30                d = 3 
            var d = (19 * a + m) % 30;
            // e = (2b + 4c + 6d + N) mod 7        e = 5 
            var e = (2 * b + 4 * c + 6 * d + n) % 7;
            // Дата Пасхи по новому стилю: 22 + d + e марта или d + e - 9 апреля       30 марта 
            // Если d = 29 и e = 6, то вместо 26 апреля будет 19 апреля 
            if (d === 29 && e === 6)
                return new Date(year, 3, 19);
            // Если d = 28, e = 6 и (11M + 11) mod 30 < 19, то вместо 25 апреля будет 18 апреля 
            if (d === 28 && e === 6 && ((11 * m + 11) % 30 < 19))
                return new Date(year, 3, 18);
            if (d + e > 9)
                return new Date(year, 3, d + e - 9);
            else
                return new Date(year, 2, 22 + d + e);
        }
        function orthodoxDate(year) {
            // https://ru.wikipedia.org/wiki/Алгоритм_Гаусса_вычисления_даты_Пасхи
            // Разделить номер года на 19 и определить остаток от деления a.
            var a = year % 19;
            // Разделить номер года на 4 и определить остаток от деления b.
            var b = year % 4;
            // Разделить номер года на 7 и определить остаток от деления c.
            var c = year % 7;
            // Разделить сумму 19a + 15 на 30 и определить остаток d.
            var d = (19 * a + 15) % 30;
            // Разделить сумму 2b + 4c + 6d + 6 на 7 и определить остаток e.
            var e = (2 * b + 4 * c + 6 * d + 6) % 7;
            // Определить сумму f = d + e.
            var f = d + e;
            // (по старому стилю) Если f ≤ 9, то Пасха будет праздноваться 22 + f марта; если f > 9, то Пасха будет праздноваться f — 9 апреля.
            // (по новому стилю) Если f ≤ 26, то Пасха будет праздноваться 4 + f апреля; если f > 26, то Пасха будет праздноваться f — 26 мая. 
            return f <= 26
                ? new Date(year, 3, 4 + f)
                : new Date(year, 4, f - 26);
        }
        // Все даты отображаем в едином формате
        function formatDate(date) {
        return date.toLocaleDateString("ru", { weekday: "long", day: "numeric", month: "long", year: "numeric" }).replace(/^.?|,/g, function(v, i) {
        return !i ? v.toUpperCase() : '<br>'
        });
        }
document.addEventListener("DOMContentLoaded", document_domcontentloaded);
        function document_domcontentloaded(){
            document.getElementById("YearEntry").value = new Date().getFullYear();
            button1_click();
            document.getElementById("button1").onclick = button1_click;
        }
        function button1_click() {
            var year = document.getElementById("YearEntry").value;
            document.getElementById("Catholic_Easter").innerHTML = formatDate(catholicDate(year));
            var date1 = orthodoxDate(year);
            document.getElementById("Orthodox_Easter").innerHTML = formatDate(date1);
            var date2 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() + 9);
            document.getElementById("Orthodox_Radunitsa").innerHTML = formatDate(date2);
            var date3 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() - 7);
            document.getElementById("palm_Sunday_Orthodox").innerHTML = formatDate(date3);
            var date4 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() - 49);
            document.getElementById("Maslenitsa_Orthodox").innerHTML = formatDate(date4);
        }
    </script>
</body>
</html>

Блондинка 08.11.2019 17:38

насколько я поняла то в 59-70 строках пояснятся как получить даты католической пасхи и по старому и по новому стилям

а в 85-90 строках как получить даты православной пасхи по обоим стилям

только всё это для меня китайская грамота, где я нихрена не понимаю,

кто нибудь может помочь разобраться?

Блондинка 08.11.2019 18:10

laimas, рони, подскажите какие именно вычисления надо добавить чтобы получить даты по старому стилю

laimas 09.11.2019 02:29

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

Это все мои познания в этой области и я никогда не стану вникать от какого рождества, что и как считать. Только при условии, что естественно, какой-то выгоды. Потому, что мне это совсем не интересно и забивать голову этой чепухой я не стану. Вот я ненавижу майонез, в моем понимании, эту гадость придумали те, которым было лень делать сметану. Это не обвинение тех, кто его ест, это чисто моя физиология и меня ничто не заставит его есть добровольно.

Два дня назад свершилась революция, правда в далеком 2017, и на тот момент это был старый стиль, а значит 25 октября. И, допустим, нам повезло, что она не случилась во времена правления Понтия Пилата, так как пересчитывать ее на далекие века не требуется, чай не пасха же. Но если функция catholicDate(year) узнает дату пасхи, и корректно, по старому стилю для эпох от Понтия Пилата и до свершения революции, а далее нет, то корректируйте ее аргумент year, узнавая век или год в этом аргументе. Или, если вы в курсе всего бытия Христа, напишите сами такой расчет для после революционной эпохи. А я даже не понимаю, что у вас там за проблема с этим праздником, вот о тех что Зимний брали, я еще могу понимать. :)

Rise 09.11.2019 05:38

Цитата:

Сообщение от Блондинка
Или как конвертировать даты из григорианского календаря в юлианский?

Такая тема есть

Блондинка 11.11.2019 19:20

народ, в скрипте почти всё есть, на этой странице подробнее объясняется что нужно чтобы получить даты пасхи и по новому и по старому стилю, и католической и православной, но для меня всё это что китайская грамота, кто может помочь?

Блондинка 19.11.2019 17:33

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

laimas 19.11.2019 19:11

:D Блондинка, я уже писал - не надо нагружать меня Христом. Если то, что вы пишите правильно, ну так конвертируйте, а что и зачем ..., я далек от этого.


Часовой пояс GMT +3, время: 23:06.