Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   почему не работает скрипт? (https://javascript.ru/forum/misc/78525-pochemu-ne-rabotaet-skript.html)

m~r.Nemo 25.09.2019 19:46

почему не работает скрипт?
 
function monthTable(month, year) {
  const monthNames = [
    'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 
    'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
  ];

  let calendar =  { 0: ['Вс'], 1: ['Пн'], 2: ['Вт'], 3: ['Ср'], 4: ['Чт'], 5: ['Пт'], 6: ['Сб'] };

  const now = new Date();
  const m = month ? month - 1 : now.getMonth();
  const y = year ? year : now.getFullYear();

  console.log(`${monthNames[m]}, ${y}`);
  console.log();

  const days = new Date(y, m + 1, 0).getDate();

  let week = 1;
  let start = new Date(y, m, 1).getDay();
  for (let i = 0; i < days; i++) {
    if (start % 7 === 1 && i > 0) {
      week++;
    }
    if (calendar[start % 7].length !== week) {
      calendar[start % 7].push('  ');
    }
    if (i < 9) {
      calendar[start % 7].push(` ${i + 1}`);
    } else {
      calendar[start % 7].push(i + 1);
    }
    start++;
  }

  for (let i = 1; i < 8; i++) {
    console.log(calendar[i % 7].join(' '));
  }
}

monthTable(5, 2015);
console.log();
monthTable(2, 2020);
console.log();
monthTable();

рони 25.09.2019 20:07

m~r.Nemo,
работает.

рони 25.09.2019 20:13

m~r.Nemo,
function monthTable(month, year) {
  const monthNames = [
    'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
    'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
  ];

  let calendar =  { 0: ['Вс'], 1: ['Пн'], 2: ['Вт'], 3: ['Ср'], 4: ['Чт'], 5: ['Пт'], 6: ['Сб'] };

  const now = new Date();
  const m = month ? month - 1 : now.getMonth();
  const y = year ? year : now.getFullYear();



  const days = new Date(y, m + 1, 0).getDate();

  let week = 1;
  let start = new Date(y, m, 1).getDay();
  for (let i = 0; i < days; i++) {
    if (start % 7 === 1 && i > 0) {
      week++;
    }
    if (calendar[start % 7].length !== week) {
      calendar[start % 7].push('  ');
    }
    if (i < 9) {
      calendar[start % 7].push(` ${i + 1}`);
    } else {
      calendar[start % 7].push(i + 1);
    }
    start++;
  }
  let txt = `${monthNames[m]}, ${y}`;
  for (let i = 1; i < 8; i++) {
    txt += `\n ${calendar[i % 7].join(' ')}`;
  }
  return  txt
}

console.log(monthTable(5, 2015));
console.log(monthTable(2, 2020));
console.log(monthTable());

m~r.Nemo 25.09.2019 20:44

рони,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
</style>
</head>
<body>
<script>
function monthTable(month, year) {
  const monthNames = [
    'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
    'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
  ];

  let calendar =  { 0: ['Вс'], 1: ['Пн'], 2: ['Вт'], 3: ['Ср'], 4: ['Чт'], 5: ['Пт'], 6: ['Сб'] };

  const now = new Date();
  const m = month ? month - 1 : now.getMonth();
  const y = year ? year : now.getFullYear();



  const days = new Date(y, m + 1, 0).getDate();

  let week = 1;
  let start = new Date(y, m, 1).getDay();
  for (let i = 0; i < days; i++) {
    if (start % 7 === 1 && i > 0) {
      week++;
    }
    if (calendar[start % 7].length !== week) {
      calendar[start % 7].push('  ');
    }
    if (i < 9) {
      calendar[start % 7].push(` ${i + 1}`);
    } else {
      calendar[start % 7].push(i + 1);
    }
    start++;
  }
  let txt = `${monthNames[m]}, ${y}`;
  for (let i = 1; i < 8; i++) {
    txt += `n ${calendar[i % 7].join(' ')}`;
  }
  return  txt
}

console.log(monthTable(5, 2015));
console.log(monthTable(2, 2020));
console.log(monthTable());
</script>
</body>
</html>

рони 25.09.2019 20:53

m~r.Nemo,
в чём проблема?

m~r.Nemo 25.09.2019 20:58

рони,
почему я вижу пустую страницу?

рони 25.09.2019 21:00

Цитата:

Сообщение от m~r.Nemo
почему я вижу пустую страницу?

потому что вы ничего на страницу не добавили.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
</style>
</head>
<body>
<script>
function monthTable(month, year) {
    const monthNames = [
        'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
        'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
    ];

    let calendar =  { 0: ['Вс'], 1: ['Пн'], 2: ['Вт'], 3: ['Ср'], 4: ['Чт'], 5: ['Пт'], 6: ['Сб'] };

    const now = new Date();
    const m = month ? month - 1 : now.getMonth();
    const y = year ? year : now.getFullYear();



    const days = new Date(y, m + 1, 0).getDate();

    let week = 1;
    let start = new Date(y, m, 1).getDay();
    for (let i = 0; i < days; i++) {
        if (start % 7 === 1 && i > 0) {
            week++;
        }
        if (calendar[start % 7].length !== week) {
            calendar[start % 7].push('  ');
        }
        if (i < 9) {
            calendar[start % 7].push(` ${i + 1}`);
        } else {
            calendar[start % 7].push(i + 1);
        }
        start++;
    }
    let txt = `${monthNames[m]}, ${y}`;
    for (let i = 1; i < 8; i++) {
        txt += `<br> ${calendar[i % 7].join(' ')}`;
    }
    return  txt
}
document.body.insertAdjacentHTML('beforeend', monthTable(5, 2015)+'<br>')
document.body.insertAdjacentHTML('beforeend', monthTable(2, 2020)+'<br>');
document.body.insertAdjacentHTML('beforeend', monthTable());
</script>
</body>
</html>

рони 25.09.2019 21:01

m~r.Nemo,
Изменение документа

m~r.Nemo 25.09.2019 21:16

рони,
всё равно страница белая как снег, может из-за браузера?
Mozilla/5.0 (Linux; Android 4.4.2; HUAWEI Y360-U61 Build/HUAWEIY360-U61) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36 ?

рони 25.09.2019 21:35

Цитата:

Сообщение от m~r.Nemo
может из-за браузера?

может.

рони 25.09.2019 21:39

m~r.Nemo,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
</style>
</head>
<body>
<script>
function monthTable(month, year) {
    var monthNames =[
        'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
        'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
    ];
        var calendar = { 0: ['Вс'], 1: ['Пн'], 2: ['Вт'], 3: ['Ср'], 4: ['Чт'], 5: ['Пт'], 6: ['Сб'] };
    var now = new Date;
    var m = month ? month - 1 : now.getMonth();
    var y = year ? year : now.getFullYear();
    var days = (new Date(y, m + 1, 0)).getDate();
    var week = 1;
    var start = (new Date(y, m, 1)).getDay();
    for (var i = 0; i < days; i++) {
        if (start % 7 === 1 && i > 0) week++;
        if (calendar[start % 7].length !== week) calendar[start % 7].push("  ");
        if (i < 9) calendar[start % 7].push(" " + (i + 1));
        else calendar[start % 7].push(i + 1);
        start++
    }
    var txt =
        monthNames[m] + ", " + y;
    for (var i$0 = 1; i$0 < 8; i$0++) txt += "<br> " + calendar[i$0 % 7].join(" ");
    var div = document.createElement("div");
    div.innerHTML = txt
    return div
}
document.body.appendChild(monthTable(5, 2015));
document.body.appendChild(monthTable(2, 2020));
document.body.appendChild(monthTable());

</script>
</body>
</html>

m~r.Nemo 25.09.2019 21:40

рони,
это можно как то исправить?

рони 25.09.2019 21:40

Цитата:

Сообщение от m~r.Nemo
это можно как то исправить?

пост #11

m~r.Nemo 25.09.2019 22:27

рони,
а не подскажешь как можно добавить таблицу, чтобы страница имела приблизительно такой код...
<div>Сентябрь, 2019</div>
<table>
<tr><td>Пн</td><td>26</td><td>2</td><td>9</td><td>16</td><td>23</td><td>30</td></tr>
<tr><td>Вт</td><td>27</td><td>3</td><td>10</td><td>17</td><td>24</td><td>1</td></tr>
<tr><td>Ср</td><td>28</td><td>4</td><td>11</td><td>18</td><td>25</td><td>2</td></tr>
<tr><td>Чт</td><td>29</td><td>5</td><td>12</td><td>19</td><td>26</td><td>3</td></tr>
<tr><td>Пт</td><td>30</td><td>6</td><td>13</td><td>20</td><td>27</td><td>4</td></tr>
<tr><td>Сб</td><td>31</td><td>7</td><td>14</td><td>21</td><td>28</td><td>5</td></tr>
<tr><td>Вс</td><td>1</td><td>8</td><td>15</td><td>22</td><td>29</td><td>6</td></tr></table>

рони 25.09.2019 22:54

m~r.Nemo,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
 td{
     border:  1px solid #0000FF;
     width: 35px;
 }

</style>
</head>
<body>
<script>
function monthTable(month, year) {
    var monthNames =[
        'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
        'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
    ];
        var calendar = { 0: ['Вс'], 1: ['Пн'], 2: ['Вт'], 3: ['Ср'], 4: ['Чт'], 5: ['Пт'], 6: ['Сб'] };
    var now = new Date;
    var m = month ? month - 1 : now.getMonth();
    var y = year ? year : now.getFullYear();
    var days = (new Date(y, m + 1, 0)).getDate();
    var week = 1;
    var start = (new Date(y, m, 1)).getDay();
    for (var i = 0; i < days; i++) {
        if (start % 7 === 1 && i > 0) week++;
        if (calendar[start % 7].length !== week) calendar[start % 7].push("  ");
        if (i < 9) calendar[start % 7].push(" " + (i + 1));
        else calendar[start % 7].push(i + 1);
        start++
    }
    var txt = "<div>" + monthNames[m] + ", " + y + "<table>";
    for (var i$0 = 1; i$0 < 8; i$0++) txt += "<tr><td>" + calendar[i$0 % 7].join("<td>");
    var div = document.createElement("div");
    div.innerHTML = txt
    return div
}
document.body.appendChild(monthTable(5, 2015));
document.body.appendChild(monthTable(2, 2020));
document.body.appendChild(monthTable());

</script>
</body>
</html>

рони 25.09.2019 23:04

m~r.Nemo,
https://javascript.ru/forum/misc/780...tml#post511038

m~r.Nemo 25.09.2019 23:07

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

рони 25.09.2019 23:44

m~r.Nemo,
https://javascript.ru/forum/misc/780...tml#post511184

m~r.Nemo 25.09.2019 23:55

рони,
если бы я шарил в js я бы не спрашивал, можешь заполнить пустые ячейки?

рони 26.09.2019 01:05

m~r.Nemo,
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Calendar</title>
  </head>
  <body>
    <style>

      .day {
        border: 1px solid #ccc;
        width: 30px;
        line-height: 30px;
        text-align: center;
        margin: 1px;
        background-color: #B0C4DE;
      }
      .month {
          width: 238px;
          height: 238px;
          margin: 30px auto;
          border: 1px solid #ccc;
      }

      .month tr:nth-child(n + 7) td.day{
         background-color:  #FF85C6;
      }
      .month tr:nth-child(1) th{
         text-align: center;
      }

    </style>
    <table class="month"></table>
    <script>
      var calendar = {
        update: function(year, month) {
          this.year = year;
          this.month = [
        'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
        'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
          ][month];
          var stepDay = new Date(year, month, 1);
          stepDay.setDate(stepDay.getDate() - ((stepDay.getDay()||7) - 1));
          var lastDay = new Date(stepDay);
          lastDay.setDate(lastDay.getDate() + 41);
          while (stepDay <= lastDay) {
            this.days.push(stepDay.getDate());
            stepDay.setHours(24);
          }
        },
        render: function() {
          var html = ['<tr>','<tr>','<tr>','<tr>','<tr>','<tr>','<tr>'];
          for (var i = 0; i < this.days.length; i++) {
            html[i % 7] += '<td class="day">' + this.days[i] ;
          }
          var title = '<tr><th colspan=7>' + this.year + ', ' + this.month;
          this.element.innerHTML = title + html.join('');
        }
      };
      var today = new Date(),
        thisYear = today.getFullYear(),
        thisMonth = today.getMonth();
      calendar.days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];

      calendar.element = document.querySelector('.month');
      calendar.update(thisYear, thisMonth);
      calendar.render();
    </script>
  </body>
</html>

m~r.Nemo 26.09.2019 03:04

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

m~r.Nemo 26.09.2019 09:11

рони,
вот смотри
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
    <style>
      body {  }
      .day {
        border: 1px solid #ccc;
        width: 30px;
        line-height: 30px;
        text-align: center;
        margin: 1px;
        background-color: #B0C4DE;
      }
      .month {
          width: 238px;
          height: 238px;
          margin: ;
          border: 1px solid #ccc;
      }
      .month tr:nth-child(n + 7) td.day{
         background-color:  #FF85C6;
      }
      .month tr:nth-child(1) th{
         text-align: center;
      }
    </style>
    </head>
    <body>
    <table class="month"></table>
    <script>
      var calendar = {
        update: function(year, month) {
          this.year = year;
                                    this.month = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'][month];
          var stepDay = new Date(year, month, 1);
          stepDay.setDate(stepDay.getDate() - ((stepDay.getDay()||7) - 1));
          var lastDay = new Date(stepDay);
          lastDay.setDate(lastDay.getDate() + 41);
          while (stepDay <= lastDay) {
            this.days.push(stepDay.getDate());
            stepDay.setHours(24);
          }
        },
        render: function() {
          var html = ['<tr>','<tr>','<tr>','<tr>','<tr>','<tr>','<tr>'];
          for (var i = 0; i < this.days.length; i++) {
            html[i % 7] += '<td class="day">' + this.days[i] ;
          }
          var title = '<tr><th colspan=7>' + this.month + ', ' + this.year;
          this.element.innerHTML = title + html.join('');
        }
      };
      var today = new Date(2019, 9),

        thisYear = today.getFullYear(),
        thisMonth = today.getMonth();
      calendar.days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
      calendar.element = document.querySelector('.month');
      calendar.update(thisYear, thisMonth);
      calendar.render();
    </script>
</body>
</html>

в следующем месяце пять недель, последний столбик лишний, как его обрезать?

рони 26.09.2019 10:37

календарь вывод дней месяца
 
m~r.Nemo,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
    <style>
      body { display: flex; flex-wrap: wrap; justify-content: space-between;}
      .day {
        border: 1px solid #ccc;
        width: 30px;
        line-height: 30px;
        text-align: center;
        margin: 1px;
        background-color: #B0C4DE;
      }
      .month {
          height: 220px;
          margin: 5px;
          border: 1px solid #ccc;
          border-radius: 4px;

      }
      .month tr:nth-child(n + 7) td.day{
         background-color:  #FF85C6;
      }
      .month tr:nth-child(1) th{
         text-align: center;
      }
    </style>
    </head>
    <body>
    <script>
      var calendar = {
        update: function(year, month) {
          this.year = year;
          this.month = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'][month];
          var startDay = new Date(year, month, 1);
          var offsetDay = (startDay.getDay()||7) - 1;
          startDay.setDate(startDay.getDate() - offsetDay);
          var lastDay = new Date(startDay);
          var days = (new Date(year, month + 1, 0)).getDate();
          days = Math.ceil((days + offsetDay)/ 7) * 7;
          lastDay.setDate(lastDay.getDate() + days);
          this.data = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
          while (startDay < lastDay) {
            this.data.push(startDay.getDate());
            startDay.setHours(24);
          }
        },
        render: function() {
          var html = ['<tr>','<tr>','<tr>','<tr>','<tr>','<tr>','<tr>'];
          for (var i = 0; i < this.data.length; i++) {
            html[i % 7] += '<td class="day">' + this.data[i] ;
          }
          var title = '<tr><th colspan=7>' + this.month + ', ' + this.year;
          this.element.innerHTML = title + html.join('');
        }
      };
      var thisYear = 2019;

      for (var i = 0; i < 12; i++) {
          var table = document.createElement('table');
          table.className = 'month';
          calendar.element = table;
          calendar.update(thisYear, i);
          calendar.render();
          document.body.appendChild(table)
      }

    </script>
</body>
</html>

m~r.Nemo 26.09.2019 11:18

рони,
а зачем календарь на год? надо только текущий месяц...

рони 26.09.2019 13:25

Цитата:

Сообщение от m~r.Nemo
а зачем календарь на год? надо только текущий месяц...

так выводите только месяц!!!

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
    <style>
      body { display: flex; flex-wrap: wrap; justify-content: space-between;}
      .day {
        border: 1px solid #ccc;
        width: 30px;
        line-height: 30px;
        text-align: center;
        margin: 1px;
        background-color: #B0C4DE;
      }
      .month {
          height: 220px;
          margin: 5px;
          border: 1px solid #ccc;
          border-radius: 4px;

      }
      .month tr:nth-child(n + 7) td.day{
         background-color:  #FF85C6;
      }
      .month tr:nth-child(1) th{
         text-align: center;
      }
    </style>
    </head>
    <body>
    <table class="month"></table>
    <script>
      var calendar = {
        update: function(year, month) {
          this.year = year;
          this.month = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'][month];
          var startDay = new Date(year, month, 1);
          var offsetDay = (startDay.getDay()||7) - 1;
          startDay.setDate(startDay.getDate() - offsetDay);
          var lastDay = new Date(startDay);
          var days = (new Date(year, month + 1, 0)).getDate();
          days = Math.ceil((days + offsetDay)/ 7) * 7;
          lastDay.setDate(lastDay.getDate() + days);
          this.data = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
          while (startDay < lastDay) {
            this.data.push(startDay.getDate());
            startDay.setHours(24);
          }
        },
        render: function() {
          var html = ['<tr>','<tr>','<tr>','<tr>','<tr>','<tr>','<tr>'];
          for (var i = 0; i < this.data.length; i++) {
            html[i % 7] += '<td class="day">' + this.data[i] ;
          }
          var title = '<tr><th colspan=7>' + this.month + ', ' + this.year;
          this.element.innerHTML = title + html.join('');
        }
      };
      var year = 2019, month = 9;
      calendar.element = document.querySelector('.month');
      calendar.update(year, month);
      calendar.render();
    </script>
</body>
</html>

m~r.Nemo 26.09.2019 14:14

рони,
кажется получилось, вывести на текущий месяц :thanks: :thanks: :thanks:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
    <style>
      body { display: flex; flex-wrap: wrap; justify-content: space-between;}
      .day {
        border: 1px solid #ccc;
        width: 30px;
        line-height: 30px;
        text-align: center;
        margin: 1px;
        background-color: #B0C4DE;
      }
      .month {
          height: 220px;
          margin: 5px;
          border: 1px solid #ccc;
          border-radius: 4px;
      }
      .month tr:nth-child(n + 7) td.day{
         background-color:  #FF85C6;
      }
      .month tr:nth-child(1) th{
         text-align: center;
      }
    </style>
    </head>
    <body>
    <table class="month"></table>
    <script>
      var calendar = {
        update: function(year, month) {
          this.year = year;
          this.month = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'][month];
          var startDay = new Date(year, month, 1);
          var offsetDay = (startDay.getDay()||7) - 1;
          startDay.setDate(startDay.getDate() - offsetDay);
          var lastDay = new Date(startDay);
          var days = (new Date(year, month + 1, 0)).getDate();
          days = Math.ceil((days + offsetDay)/ 7) * 7;
          lastDay.setDate(lastDay.getDate() + days);
          this.data = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
          while (startDay < lastDay) {
            this.data.push(startDay.getDate());
            startDay.setHours(24);
          }
        },
        render: function() {
          var html = ['<tr>','<tr>','<tr>','<tr>','<tr>','<tr>','<tr>'];
          for (var i = 0; i < this.data.length; i++) {
            html[i % 7] += '<td class="day">' + this.data[i] ;
          }
          var title = '<tr><th colspan=7>' + this.month + ', ' + this.year;
          this.element.innerHTML = title + html.join('');
        }
      };
    var today = new Date(),

        thisYear = today.getFullYear(),
        thisMonth = today.getMonth();
      calendar.days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
      calendar.element = document.querySelector('.month');
      calendar.update(thisYear, thisMonth);
      calendar.render();
    </script>
</body>
</html>

m~r.Nemo 26.09.2019 14:15

Тему можно закрыть...

рони 26.09.2019 14:29

Цитата:

Сообщение от m~r.Nemo
кажется получилось, вывести на текущий месяц

ура!!!


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