今天写项目的时候遇到的一个蠢问题,来记录一下,如果你也遇到刚好可以必坑,如果没有,那没事了。。。

正常获取七天时间,直接更改setdate传入一个整数就可以获取你传入的参数对应的天数。

那要获取七天那就循环七每次让当前天数加下标,就可以获取到这七天每天的日期

let today = new Date() //获取今天的日期
let arr = [];

for (let i = 0; i < 7; i++) {
    today.setDate(today.getDate()+i);
    console.log(today.getDate());
    arr.push(today.getDate());
}

console.log(arr);

但是这个方法的问题就是如果跨月份该怎么办。

菜鸟教程的setDtate有关于这个方法的说明

setDate()会比较传入参数是否大于当前月份日期上线,大于则月份加一,余数为下月的日期。

这个代码你打印出来会发现如果跨月份日期则输出不对照,如下

let today = new Date() //获取今天的日期
let arr = [];

for (let i = 0; i < 7; i++) {
    let str = 28 + i;//假设当前日期为4.28号
	today .setDate(str);
	console.log('日期',today);

    arr.push(today.getDate());
}

每次调用setDate更改会改变today这个日期,当日期大于当前日期上线时,会更改月份为下一个月

则变成5月(28+i)大于五月日期上线则再月份加一以此类推;

这个解决办法很简单,只要每次从新获取一下当前时间

let today = new Date() //获取今天的日期
let arr = [];

for (let i = 0; i < 7; i++) {
    let today = new Date();//每次循环将时间初始为当前时间

    let str = 28 + i;//假设当前日期为4.28号
	today.setDate(str);
	console.log('日期',today);

    arr.push(today.getDate());
}

console.log(arr);

如果你只是想获得日期这个数,可以获取到当前月份最后一天,声明一个变量等于每次的日期加下标,当这个变量大于当前月份最后一天则让变量减去本月最后一天就可以。

let data = new Date(2022,4,0);
let time = (data.getDate()>9?data.getDate():'0'+data.getDate());//4.30 本月最后一天

let today = new Date() //获取今天的日期
let str = 0;

for (let i = 0; i < 7; i++) {
    str = 28 + i > time ? (28+i)-time : 28 + i;//假设当前日期为4.28号
	console.log('日期',str);
}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐