Какой сегодня день?

Вот так получилось:
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];

};

2 лайка

еще один вариант решения:

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.

2 лайка

IgorMif

Добрый день!
Проверьте у 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];

};

Такой алгоритм получился. Пишу для тех кто хочет подсказки, но не хочет смотреть готовое решение:

  1. Определить номер индекса в массиве первого дня недели, на который выпадает первое число месяца по названию.
    По аналогии с испытанием ‘Запасы протеина’. Воскресенье будет 0-м элементом, а суббота 6м элементом в массиве. Здесь поможет indexOf.
  2. Взять остаток от деления на 7, от числа, для которого нужно найти день недели в этом месяце.
  3. Прибавить к номеру индекса первого дня недели, остаток от деления искомого дня.
  4. Если день получился больше или равен 7, вычесть из результата 7.
  5. Далее уменьшить результат ещё на 1. Для массива. Это будет индекс для массива дней.
  6. Из массива дней, получить итоговый день недели, по индексу.
2 лайка
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));