почему не работает скрипт?
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(); |
m~r.Nemo,
работает. |
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()); |
рони,
<!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> |
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> |
m~r.Nemo,
Изменение документа |
рони,
всё равно страница белая как снег, может из-за браузера? 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 ? |
Цитата:
|
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> |
рони,
это можно как то исправить? |
Цитата:
|
рони,
а не подскажешь как можно добавить таблицу, чтобы страница имела приблизительно такой код... <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> |
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> |
|
А возможно ли добавить дни предыдущего и будущего месяца, чтобы заполнить пустые ячейки столбиков?
|
|
рони,
если бы я шарил в js я бы не спрашивал, можешь заполнить пустые ячейки? |
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> |
рони,
как сделать чтобы все ячейки были заполнены, но было только те столбики в которых есть дни текущего месяца? другими словами обрезать столбик если в месяце 5 недель, или 4 тогда обрезать два столбика? возможно так? |
рони,
вот смотри <!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> в следующем месяце пять недель, последний столбик лишний, как его обрезать? |
календарь вывод дней месяца
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> |
рони,
а зачем календарь на год? надо только текущий месяц... |
Цитата:
<!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> |
рони,
кажется получилось, вывести на текущий месяц :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> |
Тему можно закрыть...
|
Цитата:
|
Часовой пояс GMT +3, время: 15:27. |