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',
},
];
因此,函数将主要包含三个参数
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如果这回答了你的问题。请把答案记下来。