08.11.2019, 16:01
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
В скрипте что то говорится про старый и новый стиль, но для меня это китайская грамота, в которой я нихрена не понимаю, если бы хоть что-то понимала то соответственно и топик не создавала...
|
|
08.11.2019, 16:19
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну если разная, узнавайте век и оперируйте разницей этого века.
|
|
08.11.2019, 17:27
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
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>
Последний раз редактировалось Блондинка, 19.11.2019 в 01:04.
|
|
08.11.2019, 17:38
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
насколько я поняла то в 59-70 строках пояснятся как получить даты католической пасхи и по старому и по новому стилям
а в 85-90 строках как получить даты православной пасхи по обоим стилям
только всё это для меня китайская грамота, где я нихрена не понимаю,
кто нибудь может помочь разобраться?
|
|
08.11.2019, 18:10
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
laimas, рони, подскажите какие именно вычисления надо добавить чтобы получить даты по старому стилю
|
|
09.11.2019, 02:29
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Блондинка, кто бы мне втолковал что такое вообще Пасха. Нет, я конечно же знаю, что на этот день пекут куличи и красят яйца, примета такая, тем более закрепившееся у меня после того как перепутав отвар луковичной шелухи с компотом я его попробовал.
Это все мои познания в этой области и я никогда не стану вникать от какого рождества, что и как считать. Только при условии, что естественно, какой-то выгоды. Потому, что мне это совсем не интересно и забивать голову этой чепухой я не стану. Вот я ненавижу майонез, в моем понимании, эту гадость придумали те, которым было лень делать сметану. Это не обвинение тех, кто его ест, это чисто моя физиология и меня ничто не заставит его есть добровольно.
Два дня назад свершилась революция, правда в далеком 2017, и на тот момент это был старый стиль, а значит 25 октября. И, допустим, нам повезло, что она не случилась во времена правления Понтия Пилата, так как пересчитывать ее на далекие века не требуется, чай не пасха же. Но если функция catholicDate(year) узнает дату пасхи, и корректно, по старому стилю для эпох от Понтия Пилата и до свершения революции, а далее нет, то корректируйте ее аргумент year, узнавая век или год в этом аргументе. Или, если вы в курсе всего бытия Христа, напишите сами такой расчет для после революционной эпохи. А я даже не понимаю, что у вас там за проблема с этим праздником, вот о тех что Зимний брали, я еще могу понимать.
Последний раз редактировалось laimas, 09.11.2019 в 02:55.
|
|
11.11.2019, 19:20
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
народ, в скрипте почти всё есть, на этой странице подробнее объясняется что нужно чтобы получить даты пасхи и по новому и по старому стилю, и католической и православной, но для меня всё это что китайская грамота, кто может помочь?
|
|
19.11.2019, 17:33
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
laimas,
кажется я не правильно подходила к решению вопроса, католическая пасха всегда празднуется только по новому стилю, значит наверное правильнее будет высчитывать даты католических праздников по новому стилю и потом конвертировать в старый стиль с помощью сервиса Rise, а православные праздники поскольку православная церковь пользуется юлианский календарём, наверное правильнее будет высчитывать по старому стилю и потом с помощью сервиса Rise, конвертировать в новый стиль...
|
|
19.11.2019, 19:11
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Блондинка, я уже писал - не надо нагружать меня Христом. Если то, что вы пишите правильно, ну так конвертируйте, а что и зачем ..., я далек от этого.
|
|
23.11.2019, 04:49
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
Rise,
возможно ли объединить эти два скрипта, и конвертировать даты католических праздников в старый стиль, а даты православных праздников конвертировать в новый стиль?
<!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> (по новому стилю)<br>
<span id="Orthodox_Easter_ul"></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 ≤ 26, то Пасха будет праздноваться 4 + f апреля; если f > 26, то Пасха будет праздноваться f — 26 мая.
return f <= 26
? new Date(year, 3, 4 + f)
: new Date(year, 4, f - 26);
}
function orthodoxDate_ul(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 апреля.
return f <= 9
? new Date(year, 2, 22 + f)
: new Date(year, 3, f - 9);
}
// Все даты отображаем в едином формате
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 date1_1 = orthodoxDate_ul(year);
document.getElementById("Orthodox_Easter_ul").innerHTML = formatDate(date1_1);
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>
|
|
|
|