Javascript 当前日期的日期范围自定义函数

Javascript 当前日期的日期范围自定义函数,javascript,Javascript,我试图写一个函数,一个基于日期的列表数组,这意味着我需要将下面的输出作为函数的返回 const data = [ { id: 1, week: 'Current Week', // Text Based on the Current year where the range lies displayText: '15th Mar - 21st Mar 2020', // Date Range

我试图写一个函数,一个基于日期的列表数组,这意味着我需要将下面的输出作为函数的返回

const data = [
        {
            id: 1,
            week: 'Current Week', // Text Based on the Current year where the range lies
            displayText: '15th Mar - 21st Mar 2020', // Date Range
            rangeStart: '03/15/2020', // range start day
            rangeEnd: '03/21/2020', // range end day
        },
        {
            id: 2,
            week: 'Last Week',
            displayText: '8th Mar - 14th Mar 2020',
            rangeStart: '03/08/2020',
            rangeEnd: '03/14/2020',
        },
        {
            id: 3,
            week: 'Week 15',
            displayText: '1st Mar - 7th Mar 2020',
            rangeStart: '03/07/2020',
            rangeEnd: '03/01/2020',
        },
        {
            id: 4,
            week: 'Week 14',
            displayText: '23rd Feb - 29th Feb 2020',
            rangeStart: '02/29/2020',
            rangeEnd: '02/01/2020',
        },
    ];
因此,函数将主要包含三个参数

  • 每周的开始日期//默认值为星期日
  • 每周结束日期//默认值星期六
  • 总共周//默认值4
  • getDateRangeList=(开始日期='Sunday',结束日期='Saturday',星期四)=>{
    让rangeDays=7;//不同的bw开始日和结束日
    让weeksToShow=Array.from({length:weeks},(u,i)=>i+1);
    让结果=weeksToShow.map((周)=>{
    设obj={};
    obj['id']=周;
    var startDate=新日期();
    startDate.setDate(周===1?startDate.getDate():startDate.getDate()-7*周);
    obj['rangeStart']=startDate.toISOString().split('T')[0];
    var endDate=新日期();
    endDate.setDate(endDate.getDate()-7*周);
    obj['rangeEnd']=endDate.toISOString().split('T')[0];
    返回obj;
    });
    返回结果;
    };
    
    达到这个结果的最佳方法是什么?

    你不需要结束日期,因为你知道一周的长度是7天
    getDateRangeList=(startDay=1,weeks=18,startDate=new Date())=>{
    让weeksToShow=Array.from({
    长度:周
    },(u,i)=>i);
    如果(startDate.getDay()!==startDay){
    startDate.setDate(startDate.getDate()-(startDate.getDay()-startDay))
    }
    返回weeksToShow.map(周=>{
    让[rangeStart,rangeEnd]=[新日期(startDate.getTime()),新日期(startDate.getTime())];
    rangeStart=新日期(rangeStart.setDate(rangeStart.getDate()-(7*周));
    rangeEnd=新日期(rangeEnd.setDate(rangeEnd.getDate()-(7*(第1周)));
    返回{
    id:一周,
    周:周===1?“当前周”:周===2?“上周”:getWeekNumber(rangeStart),
    displayText:`${getDisplayTest(rangeStart)}-${getDisplayTest(rangeEnd)}`,
    rangeStart:rangeStart.toISOString().split('T')[0]。split('-')。join('/'),
    rangeEnd:rangeEnd.toISOString().split('T')[0]。split('-').join('/'),
    }
    });
    };
    //抄袭https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php
    函数getWeekNumber(d){
    d=新日期(Date.UTC(d.getFullYear(),d.getMonth(),d.getDate());
    const dayNum=d.getUTCDay()| | 7;
    d、 setUTCDate(d.getUTCDate()+4-dayNum);
    const yearStart=新日期(Date.UTC(d.getUTCFullYear(),0,1));
    return Math.ceil(((d-yearStart)/86400000)+1)/7)
    }
    函数getDisplayTest(d){
    const[day,month,[firstDateChar,secondDateChar],year]=d.toDateString().split(“”);
    常量后缀=!secondDateChar?
    +firstDateChar==1?'st':+firstDateChar==2?'nd':+firstDateChar==3?'rd':'th':
    +firstDateChar==1?
    “th”:
    +secondDateChar==1?'st':+secondDateChar==2?'nd':+secondDateChar==3?'rd':'th'
    返回`${secondDateChar?+(firstDateChar+secondDateChar):+firstDateChar}${suffix}${month}`
    }
    
    log(getDateRangeList())
    我认为应该只有两个参数
    startDate
    weeks
    。从startDate开始,我们可以得到开始日期,通过添加7,我们可以得到结束日期。否则,函数将决定开始创建数据的日期。谢谢kenny,但是列表应该限制,所以我添加了结束日期。假设从5月5日到3月12日,我需要一份清单,因此在这种情况下,我应该知道结束日期,因为12不是,但它将如何确定开始日期?您只有三个参数。这是不够的。您在哪里指定了结束日期?如果有endDate,那么就足够了。但是仅仅从这些参数你无法得到你想要的。因此,你应该使用一些库,比如
    momentjs
    哦,好的,根据我们可以回去的几周得到它。因此,使用JSOnlyTanks-Dane没有定制的方法,但是缺少了一些东西,week和displayText属性不存在,而应该是plusminus@DILEEPTHOMAS啊,抱歉-我没有看到上面的输出是您想要的。将在中添加它。检查这一个getWeekNumber=(passedDate)=>{var d=新日期(Date.UTC(passedDate.getFullYear(),passedDate.getMonth(),passedDate.getDate());var dayNum=d.getUTCDay()| 7;d.setUTCDate(d.getutcDaynum()+4-dayNum);var yearStart=新日期(Date.UTC(d.getUTCFullYear(),0,1))返回Math.ceil((d-yearStart)/86400000+1)/7);getWeekNumber(新日期('2020-05-10'))这将给出周数。我认为这将有助于完成我们提交的答案empty@DILEEPTHOMAS如果这回答了你的问题。请把答案记下来。