Вот так получилось:
arr = [“понедельник”, “вторник”, “среда”, “четверг”, “пятница”, “суббота”, “воскресенье”];
var getDayOfWeek = function(firstOfMonth, dayOfMonth) {
var dayOfWeek;
var i = dayOfMonth % 7 - 1;
if (i < 0) {
i += 7;
}
var k = arr.indexOf(firstOfMonth);
i = k + i;
if (i >= 7) {
i = i % 7;
if (i < 0) {
i += 7
}
dayOfWeek = arr[i];
} else {
dayOfWeek = arr[i];
}
return dayOfWeek;
}
вот мой вариант решения
var getDayOfWeek = function(day, date) {
var week = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’];
var start = week.indexOf(day);
var index = (date % 7) - 1;
var a = ((start + index) % 7);
return week[a];
};
еще один вариант решения:
var getDayOfWeek = function (day, data){
var name = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’]
var dn = ‘’;
for ( i = 0; i < name.length; i++){
if(day == name[i]){
if(data % 7 == 1){dn = name[(0 + i) % 7]}
if(data % 7 == 2){dn = name[(1 + i) % 7]}
if(data % 7 == 3){dn = name[(2 + i) % 7]}
if(data % 7 == 4){dn = name[(3 + i) % 7]}
if(data % 7 == 5){dn = name[(4 + i) % 7]}
if(data % 7 == 6){dn = name[(5 + i) % 7]}
if(data % 7 == 0){dn = name[(6 + i) % 7]}
}
}
return dn
}
Мой вариант решения с перебором:
var dayOfWeekNames = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
var getDayOfWeek = function (dow, findDay) {
var tmp = dayOfWeekNames.indexOf(dow);
var findDayOfWeek = '';
for ( var i = 1; i <= findDay; i++ ) {
findDayOfWeek = dayOfWeekNames[tmp];
tmp++;
if ( tmp === 8 ) {
tmp = 1;
};
};
return findDayOfWeek;
};
Однако стоит отметить, что вариант решения Yanas`а очень оптимален с т.з. краткости кода.
Добрый день!
Проверьте у YANAS’a решение с аргументами “понедельник”, 7 (или любое кратное числу 7-14, 21, 28), должен быть undefined.
Добрый день!
Проверьте у YANAS’a решение с аргументами “понедельник”, 7 (или любое кратное числу 7-14, 21, 28), должен быть undefined.
Действительно, следует добавить:
if (a<0) { a = 7+a; }
var getDayOfWeek = function(day, date) {
var week = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’];var start = week.indexOf(day);
var index = (date % 7) - 1;
var a = ((start + index) % 7);
if (a<0) { a = 7+a; }
return week[a];
};
Такой алгоритм получился. Пишу для тех кто хочет подсказки, но не хочет смотреть готовое решение:
- Определить номер индекса в массиве первого дня недели, на который выпадает первое число месяца по названию.
По аналогии с испытанием ‘Запасы протеина’. Воскресенье будет 0-м элементом, а суббота 6м элементом в массиве. Здесь поможет indexOf. - Взять остаток от деления на 7, от числа, для которого нужно найти день недели в этом месяце.
- Прибавить к номеру индекса первого дня недели, остаток от деления искомого дня.
- Если день получился больше или равен 7, вычесть из результата 7.
- Далее уменьшить результат ещё на 1. Для массива. Это будет индекс для массива дней.
- Из массива дней, получить итоговый день недели, по индексу.
let getDayOfWeek = function(dayOfWeek, searchDay) {
let daysOfWeek = ['понедельник', "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"];
let changer = daysOfWeek.indexOf(dayOfWeek) - 1;
let indexOfWeek = ((searchDay % 7) + changer) % 7;
return daysOfWeek[indexOfWeek];
}
console.log(getDayOfWeek('суббота', 19));