回到同一天的名字一年前

时间:2017-03-03 12:50:54

标签: javascript date

我需要在同一天的一年前找到今天的日期。

因此,如果今天是星期一,我需要找到相当于今天的星期一而不是一年前。

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这样的库)

2 个答案:

答案 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;
}