Получить дату определенного дня недели в JavaScript - PullRequest
19 голосов
/ 03 сентября 2010

Я думаю, что у меня в основном мозг пердит. Я просто хочу перемотать Date() до определенного дня недели, а затем получить месяц, день, год для этого.

например. сегодня 09/03/10, но я хочу, чтобы функция (nextSession()) возвращала 09/08/10 (в следующую среду).

Как бы я это сделал? Лучшее, что я могу придумать, это добавить день к setDate() до getDay() == 3, но это ужасно ...

P.S. JQuery тоже круто.

Ответы [ 7 ]

29 голосов
/ 04 сентября 2010
function nextSession(date) {
    var ret = new Date(date||new Date());
    ret.setDate(ret.getDate() + (3 - 1 - ret.getDay() + 7) % 7 + 1);
    return ret;
}

Эта дата будет установлена ​​в следующую среду.Если это уже среда, результат будет через неделю после указанной даты.

РЕДАКТИРОВАТЬ: Добавлена ​​возможность вызова функции без параметра: nextSession() - она ​​возвращает дату следующего сеанса с сегодняшнего дня

8 голосов
/ 03 сентября 2010

Использование библиотеки DateJS .

Date.parse('next wednesday');
5 голосов
/ 03 сентября 2010

Если вам просто нужна среда, вы должны сделать что-то вроде этого:

function next(today) {
    var offset = (today.getDay() < 3) ? 0 : 7;
    var daysUntilWednesday = 3 + offset - today.getDay();
    return new Date().setDate(today.getDate() + daysUntilWednesday);
}

var wed = next( new Date() );

РЕДАКТИРОВАТЬ:

или что-то подобное?http://jsfiddle.net/zy7F8/1/

var days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

function next(day) {

    var today = new Date();
    var today_day = today.getDay();

    day = day.toLowerCase();

    for (var i = 7; i--;) {
        if (day === days[i]) {
            day = (i <= today_day) ? (i + 7) : i;
            break;
        }
    }

    var daysUntilNext = day - today_day;

    return new Date().setDate(today.getDate() + daysUntilNext);

}

// insert a week day
alert(new Date(next( "Wednesday" )));​​​​​​​​​

РЕДАКТИРОВАТЬ: Внесены исправления для введенных дней, которые еще должны прийти на той же неделе.

2 голосов
/ 04 сентября 2010

Вот функция для возврата номера следующего дня.

function nextDay(dayNb){
 return function( date ){
   return new Date(date.getTime() + ((dayNb-date.getDay() +7) %7 +1) *86400000);
 };
}

Чтобы использовать его, установите желаемый номер дня 0: пн - 6: вс

  var nextWed = nextDay(2);
  alert( nextWed( new Date() ));
2 голосов
/ 04 сентября 2010

Вот, пожалуйста: http://jsfiddle.net/ePQuv/

Значение js (jQuery не требуется):

function addDays(myDate,days) {
    return new Date(myDate.getTime() + days*24*60*60*1000);
}

function subtractDays(myDate,days) {
    return new Date(myDate.getTime() - days*24*60*60*1000);
}

function dateOfNext(weekdayNumber) {
    var today = new Date();

    var lastSunday = subtractDays(today, today.getDay());

    var daysToAdd = weekdayNumber;
    if (weekdayNumber <= today.getDay()) {
        daysToAdd = daysToAdd + 7;
    }

    return addDays(lastSunday, daysToAdd);
}

Что вычитает текущий день недели из текущей датычтобы добраться до последнего воскресенья.Затем, если сегодняшний день после или равен «следующему дню», который вы ищете, он добавляет 7 дней + день недели, к которому вы хотите добраться, в противном случае он просто добавляет день недели.Это высадит вас на следующий день недели.

1 голос
/ 19 октября 2015

Я рекомендую использовать moment.js при работе с датами.

var nextmonday = moment().day(8).format('YYYY-MM-DD'); // e.g. 2015-10-26
var nexttuesday = moment().day(9).format('YYYY-MM-DD'); // e.g. 2015-10-27
var nextwednesday = moment().day(10).format('YYYY-MM-DD'); // e.g. 2015-10-28
var nextthursday = moment().day(11).format('YYYY-MM-DD'); // e.g. 2015-10-29

Вы можете выбирать различные форматы и делать еще более приятные вещи, посмотрите: http://momentjs.com/

0 голосов
/ 29 сентября 2017

простой расчет:

//for next sunday, set 0, for saturday 6; wednesday == 3;
var needDay = 3;
var fromDate = new Date(); //or any date you calculate from
fromDate.setDate(fromDate.getDate() + (7 - fromDate.getDay()) + needDay);

console.log(fromDate);

+ (7 - fromDate.getDay ()) : добавляет к дате количество дней, чтобы изменить дату на воскресенье.
+ needDay : добавляет необходимый вам день, если в среду просто +3;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...