为了账号安全,请及时绑定邮箱和手机立即绑定

JS如何获取两个时间间隔内,每一周的开始和结束时间

JS如何获取两个时间间隔内,每一周的开始和结束时间

慕姐8265434 2018-12-07 08:27:21
var starttime=('2017-5-1');   var endtime=('2017-5-31'); function getWeek(starttime,endtime){ } //1.两个时间的周数 //2.每个周的开始时间和结束结束时间 例如:上述有5周,第一周第开始时间为2017-5-1,结束时间为2017-5-7...以此类推!
查看完整描述

19 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

@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;
                    
                }
            }

是不是这样的,你再自己整整

查看完整回答
反对 回复 2018-12-24
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

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

 

输入你选择的日期就好

查看完整回答
反对 回复 2018-12-24
?
jeck猫

TA贡献1909条经验 获得超7个赞

@Allen_su: 我的可以啊

查看完整回答
反对 回复 2018-12-24
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

@库巴: 确实还需要优化,因为我可能开始时间不是周一,而是其他的。只有周一才能正常显示,其他的不行,这是个问题。今天谢谢啦,结贴了

查看完整回答
反对 回复 2018-12-24
?
慕容708150

TA贡献1831条经验 获得超4个赞

@Allen_su: switch应该还能优化,

查看完整回答
反对 回复 2018-12-24
?
慕的地10843

TA贡献1785条经验 获得超8个赞

@Allen_su: 其实是有的,你改成8就知道了

查看完整回答
反对 回复 2018-12-24
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

@Allen_su: 嗯嗯

查看完整回答
反对 回复 2018-12-24
?
慕标5832272

TA贡献1966条经验 获得超4个赞

@库巴: 没有开始时间,8号,其他的都很好,谢啦!

查看完整回答
反对 回复 2018-12-24
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

@Allen_su: 嗯嗯,解决就好,我的也有啊

查看完整回答
反对 回复 2018-12-24
?
撒科打诨

TA贡献1934条经验 获得超2个赞

            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;
                    
                }
            }

是不是这样的?

查看完整回答
反对 回复 2018-12-24
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

@Allen_su: 稍等,这会有点忙

查看完整回答
反对 回复 2018-12-24
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

@库巴:我想实现随意输入两个日期,然后在这个范围内,算出每一周的起始时间,包括不完整的周。

比如:5.11-5.16,这横跨了两周,所以要算出第一周5.08-5.14,第二周5.15-5.21

你说再加个判断条件,好像不好加,麻烦指教一下!

查看完整回答
反对 回复 2018-12-24
?
忽然笑

TA贡献1806条经验 获得超5个赞

@Allen_su: 那样子算出来的不是完整的周一 和周日;可能是这样的 周日;周一,周日;周一。。。。。

查看完整回答
反对 回复 2018-12-24
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

@Allen_su: 是啊,还以为你不要当前周呢,你再加个条件判断就行了

查看完整回答
反对 回复 2018-12-24
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

@库巴: 谢答!

你这个代码思路很好,但是会有一个问题,就是starttime必须从周一开始的,如果是周二或其他,就算不出来所在的当前周。

比如,var starttime = '2017-5-23';var endtime='2017-5-31';结果只算出来第二周5.29-5.04的起始时间,第一周5.22-5.28的就忽略掉了。

但是,还是谢啦,挺好的思路的。学习了!

查看完整回答
反对 回复 2018-12-24
?
侃侃无极

TA贡献2051条经验 获得超10个赞

            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;
                    
                }
            }

你再优化一下吧

查看完整回答
反对 回复 2018-12-24
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

首先,谢答。

但是,我的问题是要计算从startime到endtime这段时间范围内,每一周的开始和结束时间,不只是当天时间那一周

如:2017-5-1到2017-5-8,横跨了两周,要求在这个时间范围内算出,第一周:2017-5-1到2017-5-7

第二周:2017-5-8到2017-5-14

查看完整回答
反对 回复 2018-12-24
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

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

 

 

 
 
查看完整回答
反对 回复 2018-12-24
  • 19 回答
  • 0 关注
  • 688 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号