Javascript.RU

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

Сообщение от Блондинка
так подскажите по конкретным строкам, 49-51
Причем тут эти строки. Только эти строки не исправить, что бы работало.

Вы так и не ответили на мои простые вопросы

Сообщение от voraa
Зачем вы поставили console.log в строке 110?
А если поставили, то почему не смотрите, что там выдается?
Сообщение от voraa
Что такое
var currentDate = new Date(now.getFullYear(), v.month - 1, v.day, v.hour);
<!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: { start: 0, duration: 24,  compliments: [
                              '<span class="birthday">С ДНЮХОЙ !</span>',
                              '<span class="holiday">С 2 мая !</span>',
                           ],  },
    //           '2': {'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 00:00:00:001"); // d = new Date( "9 May 2021 00:00:00:001" )

function getActualCompliments(now) {
  //   var now = new Date( "2 May 2021 00:00:00:001" ); // кат.пасха "4 April 2021 00:00:00:000", прав.пасха "2 May 2021 00:00:00:000", радуница "11 May 2021 00:00:00:000", троица "20 June 2021 00:00:00:000"

  /*
var result = holidays.filter(v =>
{
var currentDate = new Date(now.getFullYear(), v.month - 1, v.day, v.hour);
var durms = v.duration * 3600000;
console.log(now, currentDate, (now - currentDate) / 3600000);
var rg = now - currentDate;
return rg <= durms && rg >= 0;
}).map(v => v.compliments);
*/

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

  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("<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 (var c of actualCompliments) {
    const div = document.createElement("div");
    hollyday.appendChild(div);
    div.innerHTML = c;
  }
}

/* Что ниже, я не понимаю
function foo(month, day, compliment, hour = 0) {
  return { month: month, day: day, hour: hour, compliment: compliment };
}

var now9 = new Date();
now9.setDate(now9.getDate() + 9);
console.log(now9);

var now49 = new Date();
now49.setDate(now49.getDate() + 49);
console.log(now49);

if ((m = holidays[d.getMonth()]) && m[d.getDate()]) {
  m = m[d.getDate()];
  if (d.getHours() >= m.start) {
    var h = document.getElementById("holiday");
    //       if (!b) {
    b = document.createElement("div");
    b.id = "holiday";
    b.innerHTML = m.compliments;
    b.style.display = "block";
    h.appendChild(b);
  }
}
*/
    </script>
    <div id="footer"></div>
  </body>
</html>
Ответить с цитированием
  #12 (permalink)  
Старый 19.10.2021, 20:40
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Сообщение от voraa Посмотреть сообщение
Вы так и не ответили на мои простые вопросы
если бы блондинка знала бы ответы на эти вопросы...
но судя по всему строки 179-185, это расчёт дат радуницы (+9 дней) и троицы (+49 дней к пасхе) .........
Ответить с цитированием
  #13 (permalink)  
Старый 20.10.2021, 09:36
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

voraa,
спс, всё вроде бы работает, но возникают вопросы,

1.) а что делать если вдруг старт и/или продолжительность у событий разная...

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

3.) возможно ли отсортировать все события за день, чтобы сначала шли спаны с классом 'public_holiday', вторыми с классом 'holiday', и последними с классом 'birthday' ?
Ответить с цитированием
  #14 (permalink)  
Старый 20.10.2021, 16:24
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Сообщение от Блондинка
1.) а что делать если вдруг старт и/или продолжительность у событий разная...
Ну тогда наверно надо поменять формат описания праздников. Допустить массив не в compliments, а в самом дне. Типа так
2: [ { start: 6, duration: 24*7-6,  compliments:  '<span class="birthday">С ДНЮХОЙ !</span>'},
       { start: 0, duration: 24,  compliments: '<span class="holiday">С 2 мая !</span>'}
         ],

Ну и программу тогда тоже подправить
Сообщение от Блондинка
2.) а как правильно сделать, если вдруг в одном месяце из двенадцати, нет событий(праздников)...
Писать пустой объект для этого месяца, без дней. Просто {}

Сообщение от Блондинка
3.) возможно ли отсортировать все события за день, чтобы сначала шли спаны с классом 'public_holiday', вторыми с классом 'holiday', и последними с классом 'birthday' ?
Можно. Только все тексты поздравлений в compliments должны иметь вид <span class="класс"> Текст </span>

Тогда строки 167-171 так

for (const cl of ['public_holiday', 'holiday', 'birthday']) {
  for (var c of actualCompliments) {
    if (c.indexof('class="'+cl+'"') {
    const div = document.createElement("div");
    hollyday.appendChild(div);
    div.innerHTML = c;
  }
  }
}
Ответить с цитированием
  #15 (permalink)  
Старый 20.10.2021, 16:55
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Сообщение от voraa
Писать пустой объект для этого месяца, без дней. Просто {}
а возможно ли просто указать порядковый номер месяца, и просто пропускать ненужные месяцы? типа как в самой простой версии скрипта

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<style>
.holiday {
    text-align: center;
}
</style>
</head>
<body>
<script>
var holidays = {
    '5': {
        '2':
        {'start': 0, 'duration': 24, 'compliments': 'С 2 мая'},
        '2':
        {'start': 0, 'duration': 24, 'compliments': 'С днюхой!'}  
    }
}, d = new Date( "2 May 2021"), m;

if((m = holidays[d.getMonth()+1]) && m[d.getDate()]) {
    m = m[d.getDate()];
    if(d.getHours()>=m.start) {
        var b = document.createElement('div');
        b.className = 'holiday';
        b.innerHTML = m.compliments;
        document.querySelector('body').appendChild(b)
    }  
}
</script>
</body>
</html>
Ответить с цитированием
  #16 (permalink)  
Старый 20.10.2021, 17:01
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Сообщение от voraa
Можно. Только все тексты поздравлений в compliments должны иметь вид <span class="класс"> Текст </span>
ну это само собой разумеется, даже если текста поздравления нету, а просто адрес картинки, один хер тег имг надо будет заключать в <span class="класс"> <img.......> </span>
Ответить с цитированием
  #17 (permalink)  
Старый 20.10.2021, 18:07
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Сообщение от voraa
Можно. Только все тексты поздравлений в compliments должны иметь вид <span class="класс"> Текст </span>

Тогда строки 167-171 так

for (const cl of ['public_holiday', 'holiday', 'birthday']) {
  for (var c of actualCompliments) {
    if (c.indexof('class="'+cl+'"') {
    const div = document.createElement("div");
    hollyday.appendChild(div);
    div.innerHTML = c;
  }
  }
}
блин, ниХфига не получается

<!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: { start: 0, duration: 24,  compliments: [
                              '<span class="birthday">С ДНЮХОЙ !</span>',
                              '<span class="holiday">С 2 мая !</span>',
                           ],  },
    //           '2': {'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 00:00:00:001"); // d = new Date( "9 May 2021 00:00:00:001" )

function getActualCompliments(now) {
  //   var now = new Date( "2 May 2021 00:00:00:001" ); // кат.пасха "4 April 2021 00:00:00:000", прав.пасха "2 May 2021 00:00:00:000", радуница "11 May 2021 00:00:00:000", троица "20 June 2021 00:00:00:000"

  /*
var result = holidays.filter(v =>
{
var currentDate = new Date(now.getFullYear(), v.month - 1, v.day, v.hour);
var durms = v.duration * 3600000;
console.log(now, currentDate, (now - currentDate) / 3600000);
var rg = now - currentDate;
return rg <= durms && rg >= 0;
}).map(v => v.compliments);
*/

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

  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("<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 (var c of actualCompliments) {
  if (c.indexof('class="'+cl+'"') {
  const div = document.createElement("div");
  hollyday.appendChild(div);
  div.innerHTML = c;
  }
  }
  }
    </script>
    <div id="footer"></div>
  </body>
</html>


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

Сообщение от voraa
Ну тогда наверно надо поменять формат описания праздников. Допустить массив не в compliments, а в самом дне. Типа так
2: [ { start: 6, duration: 24*7-6,  compliments:  '<span class="birthday">С ДНЮХОЙ !</span>'},
       { start: 0, duration: 24,  compliments: '<span class="holiday">С 2 мая !</span>'}
         ],

Ну и программу тогда тоже подправить
а что именно подправить? пробую заменить и только поздравление с пасхой вижу...

<!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: [ { 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 00: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) {
      const hld = vm[day];
      const currentDate = new Date(now.getFullYear(), month, +day, +hld.start);
      const rg = now.getTime() - currentDate.getTime();
      if (0 <= rg && rg < hld.duration * 3600000) {
        let compl = hld.compliments;
        if (!Array.isArray(compl)) compl = [compl];
        result.push(...compl);
      }
    }
  });

  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("<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 (var c of actualCompliments) {
    const div = document.createElement("div");
    hollyday.appendChild(div);
    div.innerHTML = c;
  }
}


    </script>
    <div id="footer"></div>
  </body>
</html>
Ответить с цитированием
  #19 (permalink)  
Старый 21.10.2021, 22:38
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

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

Спасайте, помогите кто чем может...
Ответить с цитированием
  #20 (permalink)  
Старый 22.10.2021, 07:15
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

<!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: [ { 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("<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 (var c of actualCompliments) {
    const div = document.createElement("div");
    hollyday.appendChild(div);
    div.innerHTML = c;
  }
}
 
 
    </script>
    <div id="footer"></div>
  </body>
</html>
Ответить с цитированием
Ответ



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

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


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