|
// Table Ver 3.7.1 08.03.2021 |
|
|
|
var numWeek; |
|
var iconEven = "id"+Args.uid, |
|
iconOdd = "club170840389"; |
|
|
|
var xTZ = 60 *60 *3; |
|
var xDAY = 60 *60 *24; // 86400 |
|
var xWEEK = xDAY *7; // 604800 |
|
|
|
var seconds, minutes, hours, days, weeks, months, years, |
|
fSeconds, fMinutes, fHours, fDays, fWeeks, fMonths, fYears; |
|
|
|
// Смещение недель для быстрой проверки |
|
var testWEEK = 0, |
|
testDAY = 0; |
|
var testWeekAdd = xWEEK * testWEEK + xDAY * testDAY; |
|
|
|
var cTime = API.utils.getServerTime({}) + xTZ + testWeekAdd; // timestap + TZ |
|
|
|
// Дата начала отсчета недельности |
|
var oTime = 1535760000; // 01.09.2018 00:00 - Первый семестр |
|
oTime = 1549238400; // 04.02.2019 00:00 - Второй семестр |
|
oTime = 1567285200; // 01.09.2019 00:00 - Третий семестр |
|
oTime = 1598907600; // 01.09.2020 00:00 - Пятый семестр |
|
oTime = 1612742400; // 01.09.2020 00:00 - Шестой семестр (NOW) |
|
|
|
// Получили номер недели указанной даты |
|
var targWeek = (oTime / xWEEK) |0; |
|
|
|
// =================================== |
|
// Вычисление текущей даты |
|
var fulldays = (cTime/xDAY)|0; |
|
|
|
var ty = (fulldays / 365.25) | 0; |
|
|
|
var fdac; |
|
if (ty >= 0) |
|
fdac = ty * 365 + (((ty + 1)/ 4)|0) - (((ty + 69)/ 100)|0) + (((ty + 369)/ 400)|0); |
|
else |
|
fdac = ty * 365 + (((ty - 2)/ 4)|0) - (((ty - 30)/ 100)|0) + (((ty - 30)/ 400)|0); |
|
fdac = fulldays - fdac; |
|
|
|
fYears = 1970 + ty; |
|
|
|
var trest = cTime % xDAY; |
|
|
|
var MonthsName = ["Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"]; |
|
|
|
var subTable; |
|
if((fYears % 400) == 0 || ((fYears % 100) != 0) && (fYears % 4) == 0) // 366 days in year |
|
subTable = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; |
|
else |
|
subTable = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; |
|
|
|
|
|
fMonths = 0; |
|
var i = 0; |
|
while (fdac + 1 > subTable[i]) { |
|
fdac = fdac - subTable[i]; |
|
fMonths = fMonths +1; |
|
i = i + 1; |
|
} |
|
|
|
fdac = fdac+1; |
|
fMonths = fMonths +1; |
|
|
|
years = fYears + ((fMonths==12)? 0: ((fMonths / 12) | 0)); |
|
months = (fMonths==12)? 12: (fMonths % 12); |
|
days = fdac; |
|
hours = (trest / 3600) | 0; |
|
trest = trest % 3600; |
|
minutes = (trest / 60) | 0; |
|
trest = trest % 60; |
|
seconds = trest; |
|
// =================================== |
|
|
|
|
|
var currentData = //" ["+hours+":"+minutes+":"+seconds+"] "+ |
|
" ["+(days>9?days:"0"+days)+"."+(months>9?months:"0"+months)+"."+years |
|
//+" "+(hours>9?hours:"0"+hours)+":"+(minutes>9?minutes:"0"+minutes) |
|
+"]"; |
|
|
|
var cFixTime = xDAY*3; // FIX для расчета недель |
|
var cWeek = ((cTime+cFixTime)/xWEEK)|0; |
|
numWeek = cWeek - targWeek; |
|
|
|
var widgetTitle = "Недельность " + currentData; |
|
var titleWeek = numWeek; |
|
if(numWeek < 1) { |
|
titleWeek = numWeek * -1; |
|
widgetTitle = widgetTitle + "; Осталось недель "; |
|
} |
|
|
|
|
|
// Формирование информации для вывода |
|
var tD1 = "1 — 7 октября", |
|
tD2 = "8 — 14 октября", |
|
tD3 = "15 — 21 октября", |
|
tD4 = "22 — 28 Октября"; |
|
|
|
var startDay = 0, |
|
newWeek = 0, |
|
firstWeek = false, |
|
nd = xDAY; |
|
|
|
var _fdac, _fYears, _fMonths, _years; |
|
|
|
while (!firstWeek) { |
|
nd = nd + xDAY; |
|
|
|
startDay = startDay + 1; |
|
|
|
newWeek = ((cTime+cFixTime+nd)/xWEEK) |0; |
|
|
|
if(newWeek != cWeek) { |
|
if(startDay == 1 && days%7 == 3) { |
|
startDay = 0; |
|
} |
|
|
|
firstWeek = true; |
|
} |
|
|
|
// FTW Fix 2019 |
|
if( |
|
(months == 4 && days%7 == 0) |
|
|| (months == 5 && days%7 == 5) |
|
|| (months == 6 && days%7 == 2) |
|
|| (months == 7 && days%7 == 0) |
|
|| (months == 10 && days%7 == 4) |
|
// ... |
|
) |
|
startDay = startDay - 1; |
|
} |
|
|
|
var lastWeekDay = days + startDay; |
|
|
|
var d_11, d_12, m_1, mi_1, |
|
d_21, d_22, m_2, mi_2, |
|
d_31, d_32, m_3, mi_3, |
|
d_41, d_42, m_4, mi_4; |
|
|
|
var monthsFix120 = months, |
|
monthsFix = months-1, |
|
monthsFix0 = months+1, |
|
monthsFix2 = months-2; |
|
monthsFix = (monthsFix >= 12)? (12 - monthsFix): ((monthsFix < 0)? (12 + monthsFix): monthsFix); |
|
monthsFix120 = (monthsFix120 >= 12)? (12 - monthsFix120): ((monthsFix120 < 0)? (12 + monthsFix120): monthsFix120); |
|
monthsFix0 = (monthsFix0 >= 12)? (12 - monthsFix0): ((monthsFix0 < 0)? (12 + monthsFix0): monthsFix0); |
|
monthsFix2 = (monthsFix2 >= 12)? (12 - monthsFix2): ((monthsFix2 < 0)? (12 + monthsFix2): monthsFix2); |
|
|
|
d_12 = (lastWeekDay-7); |
|
d_11 = (d_12-6); |
|
|
|
d_22 = lastWeekDay; |
|
d_21 = (lastWeekDay-6); |
|
|
|
d_32 = (lastWeekDay+7); |
|
d_31 = (d_32-6); |
|
|
|
d_42 = (lastWeekDay+7*2); |
|
d_41 = (d_42-6); |
|
|
|
|
|
// 1 week (прошлая неделя) |
|
if(d_11 > 0) { |
|
mi_1 = monthsFix; // Текущий месяц |
|
} |
|
else { |
|
mi_1 = monthsFix2; // Предыдущий месяц |
|
|
|
d_11 = d_11 * -1; |
|
|
|
if(d_12>0 && d_12 < subTable[mi_1]) { |
|
if(d_11 < d_12 && months != 1 ) |
|
d_12 = subTable[mi_1] - d_12; |
|
else |
|
mi_1 = monthsFix; |
|
} |
|
else if(d_12 <= 0) { |
|
d_12 = d_12 * -1; |
|
if(d_12 < subTable[mi_1]) { |
|
if(d_11 < d_12 || months==12) |
|
d_12 = subTable[mi_1] - d_12; |
|
else { |
|
d_12 = subTable[mi_1] - d_12; |
|
|
|
if(mi_1 != 1) |
|
mi_1 = monthsFix2; |
|
} |
|
} |
|
else |
|
d_12 = subTable[monthsFix] - d_12; |
|
} |
|
|
|
if(d_11 < subTable[monthsFix2]) |
|
d_11 = subTable[monthsFix2] - d_11; |
|
} |
|
|
|
m_1 = MonthsName[mi_1]; |
|
|
|
|
|
|
|
// 2 week (текущая неделя) |
|
mi_2 = monthsFix; // Текущий месяц |
|
m_2 = MonthsName[mi_2]; |
|
|
|
if(d_21 > subTable[mi_2]) |
|
d_21 = d_21 - subTable[mi_2]; |
|
else if(d_21 <= 0 ) |
|
d_21 = subTable[monthsFix2] + d_21; |
|
|
|
if(d_22 <= subTable[monthsFix] || (months==12 && d_22 <= subTable[monthsFix])) { |
|
mi_2 = monthsFix; |
|
} |
|
else { |
|
mi_2 = monthsFix120; |
|
d_22 = d_22 - subTable[monthsFix]; |
|
} |
|
|
|
|
|
//if(d_21 > d_22 ) |
|
// m_2 = MonthsName[mi_2]; |
|
|
|
|
|
|
|
// Последующие недели |
|
// 3 week |
|
if(d_32 <= subTable[monthsFix] || (months==12 && d_32 <= subTable[monthsFix])) { |
|
// Если последний день недели текущего месяца, |
|
// то ставим текущий месяц |
|
mi_3 = monthsFix; |
|
} |
|
else { |
|
d_32 = d_32 - subTable[monthsFix]; |
|
mi_3 = monthsFix120; |
|
} |
|
|
|
|
|
if(d_31 > subTable[monthsFix]) |
|
d_31 = d_31 - subTable[monthsFix]; |
|
if(d_32 > subTable[monthsFix]) |
|
d_32 = d_32 - subTable[monthsFix]; |
|
m_3 = MonthsName[mi_3]; |
|
|
|
|
|
// 4 week |
|
if(d_42 <= subTable[monthsFix] || (months==12 && d_42 <= subTable[monthsFix])) { |
|
mi_4 = monthsFix; |
|
} |
|
else { |
|
d_42 = d_42 - subTable[monthsFix]; |
|
mi_4 = monthsFix120; |
|
} |
|
|
|
|
|
if(d_41 > subTable[monthsFix]) |
|
d_41 = d_41 - subTable[monthsFix]; |
|
if(d_42 > subTable[monthsFix]) |
|
d_42 = d_42 - subTable[monthsFix]; |
|
m_4 = MonthsName[mi_4]; |
|
|
|
|
|
tD1 = d_11+" — " + d_12 +" "+m_1; |
|
tD2 = d_21+" — " + d_22 +" "+m_2; |
|
tD3 = d_31+" — " + d_32 +" "+m_3; |
|
tD4 = d_41+" — " + d_42 +" "+m_4; |
|
|
|
return { |
|
"title": widgetTitle, |
|
"title_counter": titleWeek, |
|
"head": [ |
|
{ |
|
"text": "Неделя", |
|
"align": "left" |
|
}, |
|
{ |
|
"text": "Тип" |
|
}, |
|
{ |
|
"text": "Дата", |
|
"align": "center" |
|
} |
|
], |
|
"body": [ |
|
[ |
|
{ |
|
"text": "#"+(numWeek-1), |
|
"icon_id": ((numWeek-1)%2!=0?iconOdd:iconEven) |
|
}, |
|
{ |
|
"text": ((numWeek-1)%2!=0?"НЕ":"")+"ЧЕТНАЯ" |
|
}, |
|
{ |
|
"text": tD1 |
|
} |
|
], |
|
[ |
|
{ |
|
"text": "#"+numWeek+" СЕЙЧАС", |
|
"icon_id": (numWeek%2!=0?iconOdd:iconEven) |
|
}, |
|
{ |
|
"text": (numWeek%2!=0?"НЕ":"")+"ЧЕТНАЯ" |
|
}, |
|
{ |
|
"text": tD2 |
|
} |
|
], |
|
[ |
|
{ |
|
"text": "#"+(numWeek+1), |
|
"icon_id": ((numWeek+1)%2!=0?iconOdd:iconEven) |
|
}, |
|
{ |
|
"text": ((numWeek+1)%2!=0?"НЕ":"")+"ЧЕТНАЯ" |
|
}, |
|
{ |
|
"text": tD3 |
|
} |
|
], |
|
[ |
|
{ |
|
"text": "#"+(numWeek+2), |
|
"icon_id": ((numWeek+2)%2!=0?iconOdd:iconEven) |
|
}, |
|
{ |
|
"text": ((numWeek+2)%2!=0?"НЕ":"")+"ЧЕТНАЯ" |
|
}, |
|
{ |
|
"text": tD4 |
|
} |
|
] |
|
] |
|
}; |