Код JS из HTT-Блоков
❗️ Данный код может отличаться от варианта из видео. Возможны: исправления ошибок, удаление лишних фрагментов кода, упрощение кода
➖➖➖
👨💻 Автор кода для календаря:
@KonstantinSimplify
➖➖➖
HTTP-БЛОК 1
var mes_id = response.data.result.message_id;
setContactVariable("mes_id", mes_id);
setContactVariable("step_date", 0);
setContactVariable("date_day", "empty");
setContactVariable("page", "←.→");
setContactVariable("menu", "Меню");
setContactVariable("back", "Назад");
var date = new Date();
setContactVariable("current_date",
date.getMonth() + 1 + "." + date.getFullYear());
➖➖➖
HTTP-БЛОК 2
function getInlineKeyboard(current_date, step_date) {
var buttons = []; // Будущий массив кнопок
var days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']; // Дни недели
var months = ['Янв', 'Фев', 'Март', 'Апр', 'Май', 'Июнь', 'Июль', 'Авг', 'Сент', 'Окт', 'Нояб', 'Дек']; // Месяцы
// Разделяем полученную дату на месяц и год
var month = parseInt(current_date.split(".")[0]);
var year = parseInt(current_date.split(".")[1]);
// Создаем объект Date и устанавливаем новый месяц с учетом step_date
var date = new Date(year, month - 1); // Месяцы в объекте Date начинаются с 0
date.setMonth(date.getMonth() + step_date);
// Обновляем месяц и год после применения step_date
month = date.getMonth() + 1;
year = date.getFullYear();
// Добавляем дни недели в первый ряд кнопок
var row = [];
for (var i = 0; i < 7; i++) {
row.push({
text: days[i],
callback_data: 'empty'
});
}
buttons.push(row);
// Получаем количество дней в месяце
var daysInMonth = new Date(year, month, 0).getDate();
// Находим день недели первого дня месяца (0 - Воскресенье, 1 - Понедельник, ..., 6 - Суббота)
var firstDayOfWeek = new Date(year, month - 1, 1).getDay();
firstDayOfWeek = firstDayOfWeek === 0 ? 7 : firstDayOfWeek; // Преобразуем Воскресенье в 7
// Добавляем пустые кнопки в начало месяца
row = [];
for (var i = 1; i < firstDayOfWeek; i++) {
row.push({
text: ' ',
callback_data: 'empty'
});
}
// Добавляем дни месяца
for (var i = 1; i <= daysInMonth; i++) {
var day = i < 10 ? '0' + i : i; // Добавляем ведущий ноль для дней меньше 10
var callback_date = day + '.' + (month < 10 ? '0' + month : month) + '.' + year; // Форматируем дату для callback_data
row.push({
text: String(i),
callback_data: callback_date
});
// Если достигли конца недели или месяца, добавляем ряд в массив кнопок
if ((i + firstDayOfWeek - 1) % 7 === 0 || i === daysInMonth) {
// Добавляем пустые кнопки в конец недели, если это последняя неделя месяца
while (i === daysInMonth && row.length < 7) {
row.push({
text: ' ',
callback_data: 'empty'
});
}
buttons.push(row);
row = [];
}
}
// Добавляем ряд с кнопками навигации по месяцам
buttons.push(
[
{
text: page2,
callback_data: page2
},
{
text: months[date.getMonth()] + ' ' + date.getFullYear(),
callback_data: 'empty'
},
{
text: page1,
callback_data: page1
}
],
[
{
text: back,
callback_data: back
},
{
text: menu,
callback_data: menu
}
]
);
return buttons;
}
var menu = getContactVariable("menu");
var back = getContactVariable("back");
var page = getContactVariable("page");
page1 = page.split(".")[1];
page2 = page.split(".")[0];
// Обработка ответа пользователя
var date_day = getContactVariable("date_day");
var step_date = +getContactVariable("step_date");
if (date_day == page1) {
step_date = step_date + 1;
} else
if (date_day == page2) {
step_date = step_date - 1;
} else
if (date_day == menu) {
goToBlock(id); // указать id блока с меню
disableContinue();
} else
if (date_day == back) {
goToBlock(id); // id предыдущего блока
disableContinue();
} else
if (date_day != "empty") {
goToBlock(id); // id блока с выбранной пользователем датой
disableContinue();
};
setContactVariable("step_date", step_date);
var current_date = getContactVariable("current_date");
var step_date = parseInt(step_date, 10);
var buttons = getInlineKeyboard(current_date, step_date);
setContactVariable("buttons", JSON.stringify(buttons).slice(1, -1));