JS-获取本周的日子

AJ_*_*AJ_ 4 javascript arrays datetime date

我正在尝试制作一个功能,以获得当天的所有日期.我有一个功能,我认为工作,直到我注意到,如果一周中的某一天接近月底,就像例子二月,我得到了奇怪的数据.有谁知道发生了什么以及如何解决它?

安慰

function days(current) {
  var week = new Array();
  // Starting Monday not Sunday 
  var first = ((current.getDate() - current.getDay()) + 1);
  for (var i = 0; i < 7; i++) {
    week.push(
      new Date(current.setDate(first++))
    );
  }
  return week;
}

var input = new Date(2017, 1, 27);
console.log('input: %s', input);

var result = days(input);
console.log(result.map(d => d.toString()));
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper{min-height:100%}
Run Code Online (Sandbox Code Playgroud)

And*_*w B 8

您可以使用Moment.js库 - 用于日期/时间操作的实用程序库

以下是获取从星期一开始的本周日期的示例代码:

function getThisWeekDates() {
  var weekDates= []; 

  for (var i = 1; i <= 7; i++) {
    weekDates.push(moment().day(i)); 
  }

  return weekDates; 
}

var thisWeekDates = getThisWeekDates();

thisWeekDates.forEach(function(date){ console.log(date.format());});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.js"></script>
Run Code Online (Sandbox Code Playgroud)

上面的代码将以下结果打印到控制台:

2017-03-20T21:26:27+01:00
2017-03-21T21:26:27+01:00
2017-03-22T21:26:27+01:00
2017-03-23T21:26:27+01:00
2017-03-24T21:26:27+01:00
2017-03-25T21:26:27+01:00
2017-03-26T21:26:27+02:00
Run Code Online (Sandbox Code Playgroud)


Joe*_* Pi 6

如果您不想使用某些其他类似Moment.js的库,您也可以稍微更改一下您的功能,然后它就可以了.试试这个:

function dates(current) {
    var week= new Array(); 
    // Starting Monday not Sunday
    current.setDate((current.getDate() - current.getDay() +1));
    for (var i = 0; i < 7; i++) {
        week.push(
            new Date(current)
        ); 
        current.setDate(current.getDate() +1);
    }
    return week; 
}
console.log(dates(new Date(2017, 1, 27)));
Run Code Online (Sandbox Code Playgroud)