我需要在同一天的一年前找到今天的日期。
因此,如果今天是星期一,我需要找到相当于今天的星期一而不是一年前。
像03/03/2017
(星期五)会找到我04/03/2017
(星期五)。
16/02/2017
(星期四)会找到我18/02/2017
(星期四)等等。
我真正感兴趣的是找到比数字更多的日子。 我尝试了以下方法:
Date.prototype.addDays = function (days) {
var dat = new Date(this.valueOf());
dat.setDate(dat.getDate() + days);
return dat;
}
var dateObj = new Date();
var wanted= dateObj.addDays(-365 + 1);
但当然wanted
必须改变,因此这不起作用。
接下来,我试着找出2017年特定星期五的年份中的数字,然后在2017年找到相同的数字,试图以某种方式适应
This example
但在这种情况下,它只计算周五的数量,而不是数字,我无法让它工作。
也许最好的方法是以一周的数量为指导,而不仅仅是最接近的星期五到相同的日期数。
有没有办法只使用JavaScript(没有像Moment.js这样的库)
答案 0 :(得分:1)
您可以尝试这样的事情:
date.setYear
更新日期。
function getSameDayOfYear(date, yearsToAdd){
date = typeof(date) === "string" ? new Date(date) : date;
var retDate = new Date(+date);
retDate.setYear(retDate.getFullYear() + yearsToAdd);
var diff = date.getDay() - retDate.getDay();
retDate.setDate(retDate.getDate() + diff);
console.log(retDate.toLocaleDateString())
return retDate;
}
getSameDayOfYear("03/03/2017", -1)
getSameDayOfYear("02/16/2017", -1)
getSameDayOfYear("03/03/2017", -2)

答案 1 :(得分:1)
Rajesh 的代码有一个小问题。它会倒退 5 或 6 天,而不是前进 1 或 2 天会“更接近”。
这是一个简单的修复:
function getSameDayOfYear(date, yearsToAdd){
date = typeof(date) === "string" ? new Date(date) : date;
var retDate = new Date(+date);
retDate.setYear(retDate.getFullYear() + yearsToAdd);
var diff = date.getDay() - retDate.getDay();
if(diff < -4){
diff = diff + 7; //go forward instead of backward
}
retDate.setDate(retDate.getDate() + diff);
console.log(retDate.toLocaleDateString())
return retDate;
}