@Binarix

Как получить дату ближайшего понедельника на JS?

Нужно вывести дату следующего понедельника на JS.
  • Вопрос задан
  • 4813 просмотров
Решения вопроса 1
От сегодняшнего дня
date = new Date();
m = new Date();
if(date.getDay()){m.setDate(date.getDate() + 8 - date.getDay())} else {m.setDate(date.getDate() + 1)}
alert(m);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Joomler
@Joomler
Приведённый выше способ не совсем универсальный.
Хотя и абсолютно верный в контексте поставленного вопроса.
Насколько я понимаю, он подходит именно для понедельника, но не для любого нужного дня недели.
Кроме того, он укажет дату именно следующего понедельника, но не ближайшего. А в этом есть разница. И для некоторых случаев она крайне важна.

Поэтому предлагаю альтернативное решение. Возможно, будет полезно:
var date = new Date(),
    targetDay = 5, // пятница, начиная с вс=0
    targetDate = new Date(),
    delta = targetDay - date.getDay();
if (delta >= 0) {targetDate.setDate(date.getDate() + delta)}
else {targetDate.setDate(date.getDate() + 7 + delta)}
alert(targetDate);

Возможно, после вычисления понадобится вывести эту искомую дату русскими словами. Вот один из вариантов:
var targetNumber = targetDate.getDate();
var targetMonth = targetDate.getMonth();
switch(targetMonth) {
    case 0: targetMonth = 'января'; break;
    case 1: targetMonth = 'февраля'; break;
    case 2: targetMonth = 'марта'; break;
    case 3: targetMonth = 'апреля'; break;
    case 4: targetMonth = 'мая'; break;
    case 5: targetMonth = 'июня'; break;
    case 6: targetMonth = 'июля'; break;
    case 7: targetMonth = 'августа'; break;
    case 8: targetMonth = 'сентября'; break;
    case 9: targetMonth = 'октября'; break;
    case 10: targetMonth = 'ноября'; break;
    case 11: targetMonth = 'декабря'; break;
}
var targetYear = targetDate.getFullYear();
alert(targetNumber + ' ' + targetMonth + ' ' + targetYear + ' года');


На практике проверено и работает (пример).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы