Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 22.10.2021, 08:21
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,447

Сообщение от Блондинка
второй день трахаюсь с этим скриптом,
А на хрена вы это делаете? Вас кто то заставляет?
Я вот никогда не возьмусь, например, чинить автомобиль или штукатурить стены. От этого только хуже станет. Потому, что не умею и учиться не хочу.
Ответить с цитированием
  #22 (permalink)  
Старый 22.10.2021, 22:53
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 791

Сообщение от voraa
А на хрена вы это делаете? Вас кто то заставляет?
просто хочу сделать сайт про кактусы, и на данный момент почти всё готово из скриптов, не хватает только двух, этого скрипта поздравлений, и календаря...
Ответить с цитированием
  #23 (permalink)  
Старый 24.10.2021, 10:22
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 791

voraa,
йа понимаю, ты спецои показал что сделать то что мне надо возможно, показал половину скрипта, а помочь исправить массив для 2 мая, и сделать сортировку спанов, не хочешь чисто для того чтоб поиздеваться над блондинкой...
Ответить с цитированием
  #24 (permalink)  
Старый 24.10.2021, 13:36
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,447

Я написал массив для 2 мая и написал, как сделать сортировку
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<style>
			body {
				margin: 0;
				padding: 0;
			}
			#holiday {
				display: none;
				background: hsl(0, 0%, 90%);
				border: 1px solid hsl(0, 0%, 50%);
				border-radius: 12px/9px;
			}
			.public_holiday {
				color: hsl(340, 100%, 50%);
			}
			.holiday {
				color: hsl(210, 100%, 50%);
			}
			.birthday {
				color: hsl(120, 100%, 25%);
			}
			#holiday,
			.public_holiday,
			.holiday,
			.birthday {
				display: block;
				font: bold 24px/20px serif;
				text-align: center;
				padding: 15px 20px;
			}
		</style>
	</head>
	<body>
		<div id="header">
			<div id="logo"></div>
			<div id="block_time-data"></div>
		</div>
		<div id="holiday"></div>
		<script>
			var holidays = [
				{
					1: {
						start: 0,
						duration: 24,
						compliments: "С новым годом !",
					},
					7: {
						start: 0,
						duration: 24,
						compliments: "С рождеством !",
					},
				},
				{
					23: {
						start: 0,
						duration: 24,
						compliments: "С 23 февраля !",
					},
				},
				{
					8: { start: 0, duration: 24, compliments: "С 8 марта !" },
				},
				{
					12: {
						start: 0,
						duration: 24,
						compliments: "С днём космонавтики !",
					},
				},
				{
					1: { start: 0, duration: 24, compliments: "С 1 мая !" },
					2: [
			// Если праздников несколько, то в массив
            // Строка class="***" должна задаваться в ", а не в '
						{
							start: 6,
							duration: 24 * 7 - 6,
							compliments:
								'<span class="birthday">С ДНЮХОЙ !</span>',
						},
						{
							start: 0,
							duration: 24,
							compliments:
								'<span class="holiday">С 2 мая !</span>',
						},
					],
					9: { start: 0, duration: 24, compliments: "С 9 мая !" },
				},
				{
					1: {
						start: 0,
						duration: 24,
						compliments: "С 1 июня, Всемирным днём родителей !",
					},
				},
				{
					3: {
						start: 0,
						duration: 24,
						compliments:
							"3 июля, день независимости Республики Беларусь !",
					},
				},
				{
					12: {
						start: 0,
						duration: 24,
						compliments: "12 августа международный день молодёжи !",
					},
				},
				{
					1: {
						start: 0,
						duration: 24,
						compliments: "1 сентября, день знаний !",
					},
				},
				{
					1: {
						start: 0,
						duration: 24,
						compliments:
							"1 октября, международный день пожилых людей !",
					},
				},
				{
					7: {
						start: 0,
						duration: 24,
						compliments: "7 ноября, день октябрьской революции !",
					},
				},
				{
					25: {
						start: 0,
						duration: 24,
						compliments: "С католическим рождеством !",
					},
				},
			];

			function catholicDate(year) {
				var a = year % 19;
				var b = year % 4;
				var c = year % 7;
				var k = Math.floor(year / 100);
				var p = Math.floor((13 + 8 * k) / 25);
				var q = Math.floor(k / 4);
				var m = (15 - p + k - q) % 30;
				var n = (4 + k - q) % 7;
				var d = (19 * a + m) % 30;
				var e = (2 * b + 4 * c + 6 * d + n) % 7;
				if (d === 29 && e === 6) return new Date(year, 3, 19);
				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) {
				var a = year % 19;
				var b = year % 4;
				var c = year % 7;
				var d = (19 * a + 15) % 30;
				var e = (2 * b + 4 * c + 6 * d + 6) % 7;
				var f = d + e;
				return f <= 26
					? new Date(year, 3, 4 + f)
					: new Date(year, 4, f - 26);
			}

			const today = new Date("2 May 2021 07:00:00:001"); // d = new Date( "9 May 2021 00:00:00:001" )

			function getActualCompliments(now) {
				const result = [];
				holidays.forEach((vm, month) => {
					for (const day in vm) {
						let hlds = vm[day];
						if (!Array.isArray(hlds)) hlds = [hlds];
						for (const hld of hlds) {
							const currentDate = new Date(
								now.getFullYear(),
								month,
								+day,
								+hld.start
							);
							const rg = now.getTime() - currentDate.getTime();
							if (0 <= rg && rg < hld.duration * 3600000) {
								result.push(hld.compliments);
							}
						}
					}
				});

				const caholic = catholicDate(now.getFullYear());
				const ortodox = orthodoxDate(now.getFullYear());

				if (
					caholic.getMonth() == now.getMonth() &&
					caholic.getDate() == now.getDate()
				)
					result.push("С католической пасхой!");

				if (
					ortodox.getMonth() == now.getMonth() &&
					ortodox.getDate() == now.getDate()
				)
					result.push(
          // Строка class="***" должна задаваться в ", а не в '
						'<span class="public_holiday">С православной пасхой!</span>'
					);

				const radunitsa = new Date(ortodox);
				radunitsa.setDate(radunitsa.getDate() + 9);
				if (
					radunitsa.getMonth() == now.getMonth() &&
					radunitsa.getDate() == now.getDate()
				)
					result.push("С радуницей !");

				const trinity = new Date(ortodox);
				trinity.setDate(trinity.getDate() + 49);
				if (
					trinity.getMonth() == now.getMonth() &&
					trinity.getDate() == now.getDate()
				)
					result.push("С троицей!");

				return result;
			}

			const actualCompliments = getActualCompliments(today);

			console.log(actualCompliments);

			if (actualCompliments.length > 0) {
				const hollyday = document.getElementById("holiday");
				hollyday.style.display = "block";
				for (const cl of ["public_holiday", "holiday", "birthday"]) {
					for (const c of actualCompliments) {
						if (c.indexOf('class="' + cl + '"')>=0) {
							const div = document.createElement("div");
							hollyday.appendChild(div);
							div.innerHTML = c;
						}
					}
				}
				/*				for (var c of actualCompliments) {
								const div = document.createElement("div");
								hollyday.appendChild(div);
								div.innerHTML = c;
							}*/
			}
		</script>
		<div id="footer"></div>
	</body>
</html>
Ответить с цитированием
  #25 (permalink)  
Старый 24.10.2021, 18:31
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 791

voraa,
вот сейчас всё работает на отлично, благодарю...
Ответить с цитированием
  #26 (permalink)  
Старый 31.10.2021, 18:55
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 791

народ, в году есть несколько событий (праздников) которые отмечают не конкретного числа, а в определённый день недели конкретного месяца, например третий вторник октября, или второй понедельник апреля и тд

или отсчёт может идти с конца месяца, например последняя суббота сентября, или предпоследняя пятница февраля, (в месяце ведь может быть и 4 и 5 дней недели)

Вопрос такой, как высчитывать дату в этих обоих случаях? каким именно способом определить число(дату)?

посоветовали что-то типа такого добавить...

const holiday = {
  month: 6, //месяц праздника
  day: 7, //номер дня недели
  number: -1 // номер недели — отрицательный индекс означает что счёт ведётся с конца
};
//День Военно-морского флота
function getDate(date, year) {
  const d = new Date();
  d.setFullYear(year);
  d.setMonth(holiday.month, 1);
  const firstDay =
    1 + holiday.day + (d.getDay() < holiday.day ? -d.getDay() : 7 - d.getDay());
  const days = [firstDay];
  let day = firstDay;
  while (
    new Date(year, holiday.month, (day += 7)).getMonth() == holiday.month
  ) {
    days.push(day);
  }
  const index = (holiday.number < 0 ? days.length : 0) + holiday.number;
  //return days[index];
  return new Date(year, holiday.month, days[index]).toLocaleString();
}
console.log(getDate(holiday, 2022));


народ, помогите добавить несколько подобных событий в этот скрипт...
Ответить с цитированием
  #27 (permalink)  
Старый 01.11.2021, 20:55
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 791

никто не знает?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт некорректно работает. Как можно исправить? antonhauff Javascript под браузер 11 16.01.2018 14:28
Не работает скрипт, помогите исправить код, я нуб elgopo Javascript под браузер 0 16.12.2017 16:44
Помогите исправить скрипт кнопки fAmOus Элементы интерфейса 3 04.01.2013 21:33
API исправить скрипт Rus_lan Events/DOM/Window 2 10.11.2012 14:19
Помогите Исправить элементарный скрипт! с location.searсh pp-vp Events/DOM/Window 5 12.08.2010 14:40