-
撒科打诨
var starttime = '2017-5-8';
starttime = new Date(starttime);
var endtime='2017-5-31';
endtime = new Date(endtime);
var dif = endtime.getTime() - starttime.getTime();
dif = dif/(1000*60*60*24) +1
var mSeconds=0,oweek,startW;
getWeek(starttime,endtime);
function getWeek(starttime,endtime){
for(var i =0;i<dif;i++){
oweek = starttime.getDay();
startW= new Date( judgeStart(oweek,starttime) ) ;
if(oweek == 1){
console.log("本周开始日:"+startW);
mSeconds += 1*24*60*60*1000;
starttime = new Date(mSeconds);
}else{
if(oweek == 0){
var etartS = new Date(mSeconds);
console.log("本周结束日:"+etartS);
}
mSeconds += 1*24*60*60*1000;
starttime = new Date(mSeconds)
}
}
}
function judgeStart(oweek,starttime){
mSeconds = starttime.getTime();
switch(oweek){
case(0):return starttime+1*24*60*60*1000;
break;
case(1):return starttime;
break;
case(2):return starttime+6*24*60*60*1000;
break;
case(3):return starttime+5*24*60*60*1000;
break;
case(4):return starttime+4*24*60*60*1000;
break;
case(5):return starttime+3*24*60*60*1000;
break;
case(6):return starttime+2*24*60*60*1000;
break;
}
}
是不是这样的?
-
婷婷同学_
var curr = new Date; // get current date
var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week
var last = first + 6; // last day is the first day + 6
var firstday = new Date(curr.setDate(first)).toUTCString();
var lastday = new Date(curr.setDate(last)).toUTCString();
-
慕无忌1623718
首先,谢答。
但是,我的问题是要计算从startime到endtime这段时间范围内,每一周的开始和结束时间,不只是当天时间那一周
如:2017-5-1到2017-5-8,横跨了两周,要求在这个时间范围内算出,第一周:2017-5-1到2017-5-7
第二周:2017-5-8到2017-5-14
-
侃侃无极
var starttime = '2017-5-1';
starttime = new Date(starttime);
var endtime='2017-5-31';
endtime = new Date(endtime);
var dif = endtime.getTime() - starttime.getTime();
dif = dif/(1000*60*60*24) +1
var mSeconds,oweek,startW;
getWeek(starttime,endtime);
function getWeek(starttime,endtime){
for(var i =0;i<dif;i++){
oweek = starttime.getDay();
startW= new Date( judgeStart(oweek,starttime) ) ;
if(oweek == 1){
console.log("本周开始日:"+startW);
mSeconds += 1*24*60*60*1000;
starttime = new Date(mSeconds);
var eSeconds = mSeconds + 5*24*60*60*1000;
var etartS = new Date(eSeconds);
if(etartS <= endtime){
console.log("本周结束日:"+etartS);
}
}else{
mSeconds += 1*24*60*60*1000;
starttime = new Date(mSeconds)
}
}
}
function judgeStart(oweek,starttime){
mSeconds = starttime.getTime();
switch(oweek){
case(0):return starttime+1*24*60*60*1000;
break;
case(1):return starttime;
break;
case(2):return starttime+6*24*60*60*1000;
break;
case(3):return starttime+5*24*60*60*1000;
break;
case(4):return starttime+4*24*60*60*1000;
break;
case(5):return starttime+3*24*60*60*1000;
break;
case(6):return starttime+2*24*60*60*1000;
break;
}
}
你再优化一下吧
-
慕妹3146593
@库巴: 谢答!
你这个代码思路很好,但是会有一个问题,就是starttime必须从周一开始的,如果是周二或其他,就算不出来所在的当前周。
比如,var starttime = '2017-5-23';var endtime='2017-5-31';结果只算出来第二周5.29-5.04的起始时间,第一周5.22-5.28的就忽略掉了。
但是,还是谢啦,挺好的思路的。学习了!
-
慕田峪9158850
@Allen_su: 是啊,还以为你不要当前周呢,你再加个条件判断就行了
-
忽然笑
@Allen_su: 那样子算出来的不是完整的周一 和周日;可能是这样的 周日;周一,周日;周一。。。。。
-
慕田峪7331174
@库巴:我想实现随意输入两个日期,然后在这个范围内,算出每一周的起始时间,包括不完整的周。
比如:5.11-5.16,这横跨了两周,所以要算出第一周5.08-5.14,第二周5.15-5.21
你说再加个判断条件,好像不好加,麻烦指教一下!
-
慕妹3242003
@Allen_su: 稍等,这会有点忙
-
隔江千里
@Allen_su:
var starttime = '2017-5-8';
starttime = new Date(starttime);
var endtime='2017-5-31';
endtime = new Date(endtime);
var dif = endtime.getTime() - starttime.getTime();
dif = dif/(1000*60*60*24) +1
var mSeconds=0,oweek,startW;
getWeek(starttime,endtime);
function getWeek(starttime,endtime){
for(var i =0;i<dif;i++){
oweek = starttime.getDay();
startW= new Date( judgeStart(oweek,starttime) ) ;
if(oweek == 1){
console.log("本周开始日:"+startW);
mSeconds += 1*24*60*60*1000;
starttime = new Date(mSeconds);
}else{
if(oweek == 0){
var etartS = new Date(mSeconds);
console.log("本周结束日:"+etartS);
}
mSeconds += 1*24*60*60*1000;
starttime = new Date(mSeconds)
}
}
}
function judgeStart(oweek,starttime){
mSeconds = starttime.getTime();
switch(oweek){
case(0):return starttime+1*24*60*60*1000;
break;
case(1):return starttime;
break;
case(2):return starttime+6*24*60*60*1000;
break;
case(3):return starttime+5*24*60*60*1000;
break;
case(4):return starttime+4*24*60*60*1000;
break;
case(5):return starttime+3*24*60*60*1000;
break;
case(6):return starttime+2*24*60*60*1000;
break;
}
}
是不是这样的,你再自己整整