var starttime=('2017-5-1');
var endtime=('2017-5-31');
function getWeek(starttime,endtime){ }
//1.两个时间的周数
//2.每个周的开始时间和结束结束时间
例如:上述有5周,第一周第开始时间为2017-5-1,结束时间为2017-5-7...以此类推!
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();
|
|
首先,谢答。
但是,我的问题是要计算从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; } }
你再优化一下吧
@库巴: 谢答!
你这个代码思路很好,但是会有一个问题,就是starttime必须从周一开始的,如果是周二或其他,就算不出来所在的当前周。
比如,var starttime = '2017-5-23';var endtime='2017-5-31';结果只算出来第二周5.29-5.04的起始时间,第一周5.22-5.28的就忽略掉了。
但是,还是谢啦,挺好的思路的。学习了!
@Allen_su: 是啊,还以为你不要当前周呢,你再加个条件判断就行了
@Allen_su: 那样子算出来的不是完整的周一 和周日;可能是这样的 周日;周一,周日;周一。。。。。
@库巴:我想实现随意输入两个日期,然后在这个范围内,算出每一周的起始时间,包括不完整的周。
比如:5.11-5.16,这横跨了两周,所以要算出第一周5.08-5.14,第二周5.15-5.21
你说再加个判断条件,好像不好加,麻烦指教一下!
@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; } }
是不是这样的,你再自己整整
@库巴: 非常感谢,我解决了。你这个方法结果里没有5.11号所在周的起始时间,还得加条件判断。我的是这样的,结果可以用。
function getDays(day1, day2) { // 获取入参字符串形式日期的Date型日期 var d1 = day1.getDate(); var d2 = day2.getDate(); // 定义一周的毫秒数 var dayMilliSeconds = 1000*60*60*24*7; // 获取输入日期的毫秒数 var d1Ms = d1.getTime(); var d2Ms = d2.getTime(); // 定义返回值 var ret; var sz=new Array(); // 对日期毫秒数进行循环比较,直到d1Ms 大于等于 d2Ms 时退出循环 // 每次循环结束,给d1Ms 增加一天 for (d1Ms; d1Ms <= d2Ms; d1Ms += dayMilliSeconds) { var day = new Date(d1Ms); sz.push(day); } return sz; } // 给String对象添加getDate方法,使字符串形式的日期返回为Date型的日期 String.prototype.getDate = function(){ var strArr = this.split('-'); var date = new Date(strArr[0], strArr[1] - 1, strArr[2]); return date; } String.prototype.format = function() { var vs = arguments; return this.replace(/\{(\d+)\}/g, function() { return vs[parseInt(arguments[1])]; }); }; Date.prototype.format = function(formatString) { with (this) { return (formatString||"{0}-{1}-{2} {3}:{4}:{5}").format( getFullYear() , ("0" + (getMonth()+1)).slice(-2) , ("0" + getDate()).slice(-2) , ("0" + getHours()).slice(-2) , ("0" + getMinutes()).slice(-2) , ("0" + getSeconds()).slice(-2) ); } }; function getWeek(theDay) { if(theDay!=null){ var monday = new Date(theDay.getTime()); var sunday = new Date(theDay.getTime()); monday.setDate(monday.getDate()+1-monday.getDay()); sunday.setDate(sunday.getDate()+7-sunday.getDay()); return {monday:monday, sunday:sunday}; } } $(function(){ var dt=getDays('2017-4-1', '2017-4-22'); var week = getWeek(dt[i]); });
@Allen_su: 嗯嗯,解决就好,我的也有啊
@库巴: 没有开始时间,8号,其他的都很好,谢啦!
@Allen_su: 嗯嗯
@Allen_su: 其实是有的,你改成8就知道了
@Allen_su: switch应该还能优化,
@库巴: 确实还需要优化,因为我可能开始时间不是周一,而是其他的。只有周一才能正常显示,其他的不行,这是个问题。今天谢谢啦,结贴了
@Allen_su: 我的可以啊
function getThisWeek(str){
//按周日为一周的最后一天计算
var date = new Date(str);
var thisday = date.getDay(); //今天是这周的第几天
var step_s = -thisday+1; //上周日距离今天的天数(负数表示)
if (thisday == 0) {
step_s = -7; // 如果今天是周日
}
var step_m = 7 - thisday; // 周日距离今天的天数(负数表示)
var thisTime = date.getTime();
var monday = new Date(thisTime + step_s * 24 * 3600* 1000);
var sunday = new Date(thisTime + step_m * 24 * 3600* 1000);
//默认统计一周的时间
var starttime = new Date(monday); //本周一的日期 (起始日期)
var endtime = new Date(sunday); //本周日的日期 (结束日期)
}
getThisWeek("2017-05-11")
输入你选择的日期就好