我用new Date()获取前八个月当天的日期,怎么获取,目前我只能写一个基础的,像那种特殊的,比如到了十二月的最后一天,或者是本月的最后一天该怎么去判断呢,求解
如果你是要获取前八个月的自然日,如今天是4月22,你获取去年9月22,那就把月份修改一下
如果是获取前8 * 30 天之前的日期,那么就用绝对时间相减就行
// 方案一
const now = new Date();
let ago = null;
if (now.getMonth() >= 8 ) {
ago = new Date(now.getFullYear(), now.getMonth() - 8, now.getDate())
} else {
ago = new Date(now.getFullYear() - 1, now.getMonth() + 4, now.getDate())
}
// 方案二
const now = new Date();
const age = new Date(now.getTime() - 8 * 30 * 24 * 60 * 60 * 1000);
可以使用以下代码获取前八个月的日期:
// 获取当前日期之前八个月的日期
function getEightMonthAgo() {
const currentDate = new Date();
const currentMonth = currentDate.getMonth();
let targetMonth = currentMonth - 8;
let targetYear = currentDate.getFullYear();
if (targetMonth < 0) {
targetMonth += 12;
targetYear -= 1
}
const lastDayOfMonth = new Date(targetYear, targetMonth + 1, 0).getDate(); // 获取目标月份的最后一天
const targetDate = new Date(targetYear, targetMonth, lastDayOfMonth);
return targetDate;
}
console.log(getEightMonthAgo());
该方法使用了当前日期和月份来计算目标月份并获取目标月份的最后一天,然后创建一个新的Date对象并返回。关于12月最后一天的情况,我在获取目标月份的时候直接减去了8,因此不会出现问题。如果需要获取当前日期之前任意月份的日期,只需要修改计算目标月份和细节处理的代码即可。
代码中使用了两个Date构造函数,一个是用于获取目标月份最后一天的构造函数,另一个是用于创建目标日期的构造函数。在处理目标月份的时候要注意负数的情况,需要减去12并将年份减1。
至于如何判断获取的日期是否正确,由于我是根据当前日期推算出的目标月份最后一天,因此不会出现日期不合法的情况。如果使用其他方法获取日期,比如用户手动输入,则需要对日期合法性进行校验。常用的方法包括判断年份、月份和日的范围是否符合逻辑,以及闰年的处理等。可以通过条件语句和逻辑运算符来实现。