在JavaScript中获取特定星期几的日期

时间:2010-09-03 19:24:00

标签: javascript jquery datetime

我想我主要是脑屁。我只想将Date()快进到一周的特定日期,然后获得月,日,年。

E.g。今天是09/03/10,但我想要一个函数(nextSession())返回09/08/10(下周三)。

我该怎么做?我能想到的最好的事情就是在setDate() == 3之前添加一天getDay(),但这有点难看......

P.S。 jQuery也很酷。

7 个答案:

答案 0 :(得分:29)

function nextSession(date) {
    var ret = new Date(date||new Date());
    ret.setDate(ret.getDate() + (3 - 1 - ret.getDay() + 7) % 7 + 1);
    return ret;
}

这个会将日期设定为下周三。如果已经是星期三,则结果将在给定日期之后一周。

编辑:增加了在没有参数的情况下调用函数的可能性:nextSession() - 它从今天开始返回下一个会话日期

答案 1 :(得分:8)

使用the DateJS library

Date.parse('next wednesday');

答案 2 :(得分:5)

如果你只需要周三,你应该能够做到这样的事情:

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" )));​​​​​​​​​

编辑:对同一周内未来的日期进行了更正。

答案 3 :(得分:2)

在这里: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天+你想要到达的那一天,否则它只是添加星期几。这将使您在任何给定的工作日下一次。

答案 4 :(得分:2)

这是一个返回第二天号码的功能。

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() ));

答案 5 :(得分:1)

如果使用日期,我建议使用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/

答案 6 :(得分:0)

简单计算:

&#13;
&#13;
//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);
&#13;
&#13;
&#13;

+(7 - fromDate.getDay()):将日期更改为日期以将日期更改为星期日。
+ needDay :添加你需要的一天,如果是周三,只需+3;