我正试图通过这个布尔逻辑来确定是否显示即将到来的生日的标签,我对此有点不知所措。
const birthDayDate = new Date('1997-09-20');
const now = new Date();
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0);
const threshold = new Date(today).setDate(today.getDate() + 8);
console.log(birthDayDate >= today && birthDayDate < new Date(threshold));
这是我的代码片段,如果即将到来的生日在7天内,我希望它能得到安慰。log true。
现在,考虑到今天,在我的时区写这篇文章的时间是2022年9月14日,我希望它能安慰日志,这是正确的结果,因为我们比较的日期是6天,而不考虑年份。
您正在比较birthDayDate是否大于今天。1997年的一天怎么会超过2022年的一天呢?
一个可能的解决方案是将出生日期的年份更改为今年,然后检查该日期是否在今天的7天内:
const birthDayDate = new Date('1997-09-20');
const thisYear = new Date(birthDayDate)
thisYear.setYear(new Date().getFullYear());
const now = new Date();
console.log(thisYear - now <= 1000 * 60 * 60 * 24 * 7 && thisYear - now >= 0);
1000 * 60 * 60 * 24 * 7
仅为7天(以毫秒为单位(。
我们还必须用thisYear - now >= 0
检查日期是否已经过了今天。
试试这个,它还会检查日期是否在出生日期之后,然后返回false。
const birthDayDate = new Date("1997-09-20");
const now = new Date();
const after_threshold = new Date(now.getFullYear(),birthDayDate.getMonth(),birthDayDate.getDate(),0,0,0);
const before_threshold = new Date(now.getFullYear(),birthDayDate.getMonth(),birthDayDate.getDate() + 8,0,0,0);
console.log(before_threshold >= now && after_threshold <= now);