2009-10-16 3 views
12

Как можно вернуть следующую дату данного дня недели (это может быть либо число 0-6, либо имена воскресенье-суббота).Получить следующую дату с буднего дня в JavaScript

Например, если сегодня, в пятницу 16-октября-2009 я прошел в:

  • пятницу, было бы вернуть сегодняшнюю дату 16-Oct-2009
  • Суббота возвращается 17-окт-2009
  • Четверг22-окт-2009
+5

Это не рента-кодер - вы не должны просить людей сделать для вас какую-то работу. Пожалуйста, перефразируйте свой пост в форме вопроса. –

+0

Мне нужен миллион долларов. Но я не прихожу сюда, чтобы просить об этом. –

+0

@ Andy E Почему вы не проголосовали за этот вопрос? Я устал от того, что пользователи этого сообщества пренебрегают проголосованием только потому, что они теряют смысл. Я бы никогда сюда не приехал, если бы он был в -1! –

ответ

22

Просто добавление 7 не решит проблему.

Функция ниже предоставит вам следующий день недели.

function nextDay(x){ 
    var now = new Date();  
    now.setDate(now.getDate() + (x+(7-now.getDay())) % 7); 
    return now; 
} 
+2

Для любопытных это так: код получает текущий день месяца (1-31) и добавляет разницу между сегодняшним днем ​​недели (0-6) и желаемым днем ​​недели (0-6), затем использует мод, чтобы убедиться, что новое значение не более 6. – Polyducks

3

Для расширения user 190106 «s answer, этот код должен дать вам то, что вы хотите:

function getNextDay(day, resetTime){ 
    var days = { 
    sunday: 0, monday: 1, tuesday: 2, 
    wednesday: 3, thursday: 4, friday: 5, saturday: 6 
    }; 

    var dayIndex = days[day.toLowerCase()]; 
    if (!dayIndex) { 
    throw new Error('"' + day + '" is not a valid input.'); 
    } 

    var returnDate = new Date(); 
    var returnDay = returnDate.getDay(); 
    if (dayIndex !== returnDay) { 
    returnDate.setDate(returnDate.getDate() + (dayIndex + (7 - returnDay)) % 7); 
    } 

    if (resetTime) { 
    returnDate.setHours(0); 
    returnDate.setMinutes(0); 
    returnDate.setSeconds(0); 
    returnDate.setMilliseconds(0); 
    } 
    return returnDate; 
} 

alert(getNextDay('thursday', true)); 
13

Вот слегка измененная версия для ответа Тима обратиться конкретный question-- передать в дату д, и, и желаемый день недели (0-6 доу), возвращает дату

function nextDay(d, dow){ 
    d.setDate(d.getDate() + (dow+(7-d.getDay())) % 7); 
    return d; 
} 
+2

Работает как очарование. Fiddle: https://jsfiddle.net/pomqt31x/3/ – Patito

+0

Для тех, кому нужно получить день недели после следующего или неделю после этого: добавить аргумент недели 'function nextWeekDay (d, dow, w)' а затем добавьте неделю к вычислению и удалите модуль: 'returnDate.setDate (d.getDate() + (dow + ((w * 7) -d.getDay())));' – stackingjasoncooper

3

Вот еще один простое решение

//takes dayIndex from sunday(0) to saturday(6) 
 
function nextDate(dayIndex) { 
 
    var today = new Date(); 
 
    today.setDate(today.getDate() + (dayIndex - 1 - today.getDay() + 7) % 7 + 1); 
 
    return today; 
 
} 
 
document.write("Next Sunday is: "+nextDate(0).toLocaleString()+"<br/>"); 
 
document.write("Next Thursday is: "+nextDate(4).toLocaleString()+"<br/>"); 
 
document.write("Next Saturday is: "+nextDate(6).toLocaleString());

0

И если вы не хотите делать передать номера, но будний день-имена (воскресенье - суббота), чтобы найти будущую дату в определенный день недели, то это поможет вам, а также:

function getDateOfWeekday(refday){ 
 
    var days = { 
 
     monday: 1, 
 
     tuesday: 2, 
 
     wednesday: 3, 
 
     thursday: 4, 
 
     friday: 5, 
 
     saturday: 6, 
 
     sunday: 0 
 
    }; 
 
    if(!days.hasOwnProperty(refday))throw new Error(refday+" is not listed in "+JSON.stringify(days)); 
 
    var currDate = new Date(); 
 
    var currTimestamp = currDate.getTime(); 
 
    var triggerDay = days[refday]; 
 
    var dayMillDiff=0; 
 
    var dayInMill = 1000*60*60*24; 
 
    // add a day to dayMillDiff as long as the desired refday (sunday for instance) is not reached 
 
    while(currDate.getDay()!=triggerDay){ 
 
     dayMillDiff += dayInMill; 
 
     currDate = new Date(currDate.getTime()+dayInMill); 
 
    } 
 
    return new Date(currTimestamp + dayMillDiff); 
 
} 
 

 
var sunday = getDateOfWeekday("sunday"); 
 
document.write("Next Sunday is at: <strong>"+sunday.toLocaleString()+"</strong><br/>"); 
 

 
var thursday = getDateOfWeekday("thursday"); 
 
thursday.setHours(0,0,0,0); // set hours/minutes/seconds and millseconds to zero 
 
document.write("Next Thursday is at: <strong>"+thursday.toLocaleString()+"</strong> on midnight<br/>"); 
 

 
var tuesday = getDateOfWeekday("tuesday"); 
 
document.write("Next Tuesday is at: <strong>"+tuesday.toLocaleString()+"</strong><br/>");

Смежные вопросы