我觉得我主要是脑抽了。我想快进一个Date()
到一周中的特定某一天,然后获取那一天的月份、日期和年份。
例如,今天是09/03/10,但我希望一个名为nextSession()
的函数返回09/08/10(下周三)。
我该如何做呢?我能想到的最好的方法是通过增加setDate()
的天数直到getDay()
等于3,但这有点丑陋……
P.S. jQuery 也很酷。
我觉得我主要是脑抽了。我想快进一个Date()
到一周中的特定某一天,然后获取那一天的月份、日期和年份。
例如,今天是09/03/10,但我希望一个名为nextSession()
的函数返回09/08/10(下周三)。
我该如何做呢?我能想到的最好的方法是通过增加setDate()
的天数直到getDay()
等于3,但这有点丑陋……
P.S. jQuery 也很酷。
function nextSession(date) {
var ret = new Date(date||new Date());
ret.setDate(ret.getDate() + (3 - 1 - ret.getDay() + 7) % 7 + 1);
return ret;
}
这个函数会将日期设置为下个星期三。如果今天就是星期三,则返回给定日期的一周后。
编辑:新增了不带参数调用该函数的可能性:nextSession()
- 它返回从今天开始下一个会话的日期。
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" )));
编辑:更正了在同一周内输入的未来日期。
indexOf
替换。我知道循环快而且小,但我认为这样更容易阅读。此外,该函数应检查日期是否为当天,如果不是则抛出错误。 - nycynikfunction 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天+你想要到达的星期几的天数,否则只添加星期几的天数。这将使您落在任何给定工作日的下一个日期。
这里是一个返回下一天数字的函数。
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() ));
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
简单计算:
//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;
var ret = new Date();
,它必须是new Date(date)
,因为 setDate() 只会设置月份中的日期,其他信息如月份或年份都会消失。我声明变量 ret 的原因是因为我不想改变值date
。var ret = new Date(date)
会复制对象date
,而不是引用的副本。 编辑:对不起,当然它将适用于当前日期,我没有看到所有的东西 ^^' - pepkin88